搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
AllinToyou
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
教你使用Pyinstaller将Python源码打包成可执行程序exe的方法_pyinstaller打包命令
2
def func python_python函数之基础
3
2023蓝初HW面试小结_2023hw蓝队面试
4
react-native系列(3)入门篇:使用VSCode及RN的代码调试过程_拉取rn项目后使用vscode打开需要install吗
5
bootstrap查询树写法_bootstrap 搜索树形
6
【Docker高级篇】Docker安装Dockerfile自定义镜像_dockerfile设置miniconda镜像
7
flutter项目给安卓打正式包 和升级版本号_flutter 安卓升级
8
Google Play上架:谷歌下架封号问题解决 《我们发现与您的开发者账户相关的高风险或滥用模式,并根据保单覆盖政策采取此行动(账户已终止)》_谷歌上架老是被封如何解决
9
MacBook Air M2无需虚拟屏启用Hidpi+任意缩放(22年9月)_m2怎样看是否开启了hidpi
10
【精品毕设推荐】基于JSP的旅游网站设计与实现
当前位置:
article
> 正文
linux内核学习-4kernal目录(关注新浪微博:寂寞侵蚀的岁月(4000多篇技术分享))_kernal层学习
作者:AllinToyou | 2024-05-08 00:21:21
赞
踩
kernal层学习
该目录下的代码文件从功能上可以分为三类,一类是硬件(异常)中断处理程序文件,一类是系统
调用服务处理程序文件,另一类是进程调度等通用功能文件。参见图1.5。我们现在根据这个分类方式,
从实现的功能上进行更详细的说明。
5.1.1.1 硬件中断处理类程序
主要包括两个代码文件:asm.s 和traps.c 文件。asm.s 用于实现大部分硬件异常所引起的中断的汇
编语言处理过程。而traps.c 程序则实现了asm.s 的中断处理过程中调用的c 函数。另外几个硬件中断
处理程序在文件system_call.s 和mm/page.s 中实现。
更多电子书教程下载请登陆http://down.zzbaike.com/ebook
本站提供的电子书教程均为网上搜集,如果该教程涉及或侵害到您的版权请联系我们。
第5 章 内核代码 linux/kernel/
72
中断信号通常可以分为两类:硬件中断和软件中断(异常)。每个中断是由0-255 之间的一个数字来
标识。对于中断int0--int31(0x00--0x1f),每个中断的功能是由Intel 固定设定或保留用的, 属于软
件中断,但Intel 称之为异常。因为是由CPU 执行指令时探测到异常时引起的。通常还可分为故障(Fault)
和陷阱(traps)两类。中断int32--int255 (0x20--0xff)可以由用户自己设定。在Linux 系统中,则将
int32--int47(0x20--0x2f)对应于8259A 中断控制芯片发出的硬件中断请求信号IRQ0-IRQ15;并把程序
编程发出的系统调用(system_call)中断设置为int128(0x80)。
asm.s 代码文件主要涉及对Intel 保留中断int0--int16 的处理,其余保留的中断int17-int31 由
Intel 公司留作今后扩充使用。对应于中断控制器芯片各IRQ 发出的int32-int47 的16 个处理程序将分
别在各种硬件(如时钟、键盘、软盘、数学协处理器、硬盘等)初始化程序中处理。Linux 系统调用中
断int128(0x80)的处理则将在kernel/system_call.s 中给出。各个中断的具体定义见代码注释后其它
信息一节中的说明。
对一个硬件异常所引起的中断的处理过程见下度所示(图5.1)。
图5.1 硬件异常(故障、陷阱)所引起的中断处理流程
由于有些异常引起中断时,CPU 内部会产生一个出错代码压入堆栈(异常中断int 8 和int10 - int
14),而其它的中断却并不带有这个出错代码(例如被零除出错和边界检查出错等),因此,asm.s 程序
中将所有中断的处理根据是否携带出错代码而分别进行处理。但处理流程还是一样的。
会产生出错代码的
5.1.1.2 系统调用处理相关程序
Linux 中应用程序调用内核的功能是通过中断调用int 0x80 进行的,寄存器eax 中放调用号。因此
该中断调用被称为系统调用。实现系统调用的相关文件包括system_call.s、fork.c、signal.c、sys.c
和exit.c 文件。
system_call.s 程序的作用类似于硬件中断处理中的asm.s 程序的作用,另外还对时钟中断和硬盘、
软盘中断进行处理。而fork.c 和signal.c 中的一个函数则类似于traps.c 程序的作用,为系统中断调
用提供C 处理函数。fork.c 程序提供两个C 处理函数:find_empty_process()和copy_process()。
所有寄存器入栈。
出错代码-->入栈
中断返回地址-->入栈
所有段寄存器置为内核
代码段的选择符值
调用相关C 处理函数
弹出入栈的出错码和后
来入栈的中断返回地址
弹出所有入栈寄存器
中断返回
注1:内核代码的选择
符值为0x10;
注2:无出错代码时就
使用0;
注3:调用的C 函数在
traps.c 中实现。压入
堆栈的出错代码和中
断返回地址是用作C 函
数的参数。
更多电子书教程下载请登陆http://down.zzbaike.com/ebook
本站提供的电子书教程均为网上搜集,如果该教程涉及或侵害到您的版权请联系我们。
第5 章 内核代码 linux/kernel/
73
signal.c 程序还提供一个处理有关进程信号的函数do_signal(),在系统调用中断处理过程中被调用。
另外还包括4 个系统调用sys_xxx()函数。
sys.c 和exit.c 程序实现了其它一些sys_xxx()系统调用函数。这些sys_xxx()函数都是相应系统
调用所需调用的处理函数,有些是使用汇编语言实现的,如sys_execve();而另外一些则用C 语言实现
(例如signal.c 中的4 个系统调用函数)。
我们可以根据这些函数的简单命名规则这样来理解:通常以'do_'开头的中断处理过程中调用的C
函数,要么是系统调用处理过程中通用的函数,要么是某个系统调用专用的;而以'sys_'开头的系统调
用函数则是指定的系统调用的专用处理函数。例如,do_signal()函数基本上是所有系统调用都要执行的
函数,而do_hd()、do_execve()则是某个系统调用专用的C 处理函数。
5.1.1.3 其它通用类程序
这些程序包括schedule.c、mktime.c、panic.c、printk.c 和vsprintf.c。
schedule.c 程序包括内核调用最频繁的schedule()、sleep_on()和wakeup()函数,是内核的核心
调度程序,用于对进程的执行进行切换或改变进程的执行状态。mktime.c 程序中仅包含一个内核使用的
时间函数mktime(),仅在init/main.c 中被调用一次。panic.c 中包含一个panic()函数,用于在内核
运行出现错误时显示出错信息并停机。printk.c 和vsprintf.c 是内核显示信息的支持程序,实现了内
核专用显示函数printk()和字符串格式化输出函数vsprintf()。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/AllinToyou/article/detail/551934
推荐阅读
article
【
Linu
x
&网络
安全
】
Linu
x
操作系统
安全
配置(超全超详细)_
test
:
x
...
在我们
Linu
x
系统当中,默认的情况下,所有的系统上的帐号与一般身份使用者,还有root的相关信息, 都是记录在/etc...
赞
踩
article
【
Linux
】
文件
系统
中
inode
与软硬
链接
以及读写权限问题_
linux
链接
文件
的权限...
文件
=
文件
内容+
文件
属性
Linux
中
文件
内容与属性是分开存储的。
文件
内容:在数据块中存着
文件
属性:在
inode
中存着Bl...
赞
踩
article
linux
我
的
世界
跨
平台
联机
,
我
的
世界
跨
平台
联机
PC、手机等
平台
数据互通...
我
的
世界
( MineCraft,简称 MC ) 》是一款开放
世界
沙盒建造游戏,有着超高
的
自由度,在国内外有着相当高
的
人...
赞
踩
article
CentOS最优雅的方式
安装
mysql
8_
mysql
-8.3.0-
linux
-glibc2.28-x...
本来想偷个小懒使用yum/dnf
安装
一下mysq8,但是发现会出现各种问题,系统是CentOS8的.于是还是使用最原始但...
赞
踩
article
Linux
Centos8
Mysql
8.3
.0安装_
mysql
8.3
linux
安装...
解压
mysql
-
8.3
.0-1.el8.x86_64.rpm-bundle.tar。如果是云服务器,需要在"控制台"放开...
赞
踩
article
黑客
圈最受欢迎的
21
个
Kali
Linux
工具
,你都用过哪几个?_
kali
除了
msf
...
它是道德
黑客
ethical hacker最推荐的
Linux
发行版之一。即使你不是
黑客
而是网站管理员 —— 你仍然可以...
赞
踩
article
Linux
IP Forwarding
路由
转发
实验...
Linux
操作系统具备
路由
转发
功能,
路由
功能是指
Linux
操作系统提供的
路由
管理和
转发
功能,它允许
Linux
主...
赞
踩
article
LINUX
TCP
/
IP
内核
参数
调优(适用于拉大流场景
,
但延迟、抖动会增大)...
【代码】
LINUX
TCP
/
IP
内核
参数
调优(适用于拉大流场景
,
但延迟、抖动会增大)
LINUX
TCP
/
IP
内核
参数
调优...
赞
踩
article
Mac
Rust
编译(Android)动态链接库实践_mac 安装
aarch64
-
linux
-an...
经过调试,发现是因为Mac电脑上无法安装lunwind 导致,然后使用brew进行安装,但是依然失败。5、然后可以直接切...
赞
踩
article
Rust 交叉编译
mac
OS 为
Linux
和
Windows
_
mac
14.x 安装
musl
...
鉴于 rust 中文资料较少,遇到问题的解决方案更少。这里记录遇到的一些问题。Rust 支持交叉编译,可以在
mac
OS...
赞
踩
article
Rust
交叉编译——
Windows
To
Linux
_
rust
windows
to
linux
...
0x00 开篇什么是交叉编译?可能有的同学不理解。我这里简单介绍下,所谓交叉编译,就是在一个平台上可以编译生成另一个平台...
赞
踩
article
【Linux】
VNC
+
内网
穿透
实现
公网
远程桌面
访问
Ubuntu
...
本文主要讲解了如何在
Ubuntu
上安装
VNC
实现
远程桌面
控制,并通过cpolar
内网
穿透
工具来实现
公网
远程控制,同时还介...
赞
踩
article
onlyoffice
(
windows
+
linux
)
服务
搭建
详解以及
api
集成和踩坑说明_onlyof...
onlyoffice
(
windows
+
linux
)
服务
搭建
详解以及
api
集成和踩坑说明_
onlyoffice
windo...
赞
踩
article
Linux
umount
命令
教程:如何安全地
卸载
文件系统
(附实例详解和
注意事项
)...
umount
命令
在
Linux
和UNIX操作系统中用于
卸载
已挂载的
文件系统
。它通过从
Linux
默认
文件系统
的挂载点删除连接...
赞
踩
article
一天
一个
Linux
命令
(
32
):
umount
命令
_
umount
-lf...
本文为joshua317原创文章,转载请注明:转载自joshua317博客
一天
一个
Linux
命令
(
32
):umoun...
赞
踩
article
【
Linux
】
yum
和
vim
的使用_
yum
vim
...
Linux
软件包管理器
yum
和
Linux
文本编辑器
vim
的使用_
yum
vim
yum
vim
...
赞
踩
article
Linux
——
权限
...
带你了解
Linux
的
权限
Linux
——
权限
文章目录 1.权...
赞
踩
article
【
Linux
】
环境变量
、
进程
替换、
wait
/
wait
pid...
【
Linux
】
环境变量
、
进程
替换、
wait
/
wait
pid【
Linux
】
环境变量
、
进程
替换、
wait
/
wait
pid ...
赞
踩
article
kali
linux
2021.1安装
parallels
tools
踩坑记录_an
error
oc...
首先点击右上角的黄色叹号,桌面会出现安装光盘,选择在此处打开Terminal但是这里文件系统是只读的,我们无法执行ins...
赞
踩
article
Linux
环境中Postgresql-
10
安装
RPM
安装
详细步骤_
postgres
自己
打
rpm
...
vi /home/data/
postgres
ql.conf (这个在
自己
安装
的data路径下,直接打开编辑也可以)改了默...
赞
踩
相关标签
linux
安全
web安全
服务器
java
linux 我的世界 跨平台联机
centos
msyql
mysql
运维
网络安全
tcp/ip
网络
rust
macos
android
windows