
Linux内核读书笔记
文章平均质量分 84
Rebirth__Man
这个作者很懒,什么都没留下…
展开
-
越界访问
页式存储管路机制通过页面目录和页面表将每个线性地址(也可以理解为虚拟地址)转换成物理地址。如果在这个过程中遇到某种阻碍而是CPU无法最终访问到相应的物理内存单元,映射便失败了,而当前的指令也就不能执行完成。此时CPU会产生一个页面错误(page fault)异常(exception)(也称缺页中断),进而执行预定的页面异常处理程序,使应用程序得意从映射失败而暂停的指令处开始恢复执行,或进行一些善后原创 2017-10-26 17:18:40 · 620 阅读 · 0 评论 -
系统调用
系统调用是CPU主动地、同步地进入系统空间的手段。中断有可能发生在CPU已经运行在系统空间的时候,而系统调用却只发生于用户空间。CPU在穿过陷阱门进入系统内核时并不自动关中断,所以系统调用的过程是可中断的。Linux内核在系统调用时是通过寄存器而不是通过堆栈传递参数的。发生系统调用,首先检验当前的准入等级与CPU当前的运行等级。然后通过函数指针找到system_call()。sys原创 2017-12-05 13:38:56 · 328 阅读 · 0 评论 -
软中断与Bottom Half
中断服务一般都是在将中断请求关闭的条件下执行的,以避免嵌套而使控制复杂化。可是,如果关中断的时间持续太长就可能因为CPU不能及时响应其他的中断请求而使中断(请求)丢失,为此,内核允许再将具体的中断服务程序挂入到中断请求队列时将SA_INTERRUPT标志置成0,使这个中断服务程序在开中的条件下执行。实际情况下,全开中断与不开中断都有弊端。一般,一次中断服务的过程常常可以分成两部分。开头的部分往原创 2017-12-02 23:04:23 · 384 阅读 · 0 评论 -
X86CPU对中断的硬件支持
中断有两种,一种是由CPU外部产生的,另一种是由CPU本身在执行过程的过程中产生的。外部中断时“异步”的。CPU(或软件)对外部中断的响应是被动的。不过,软件可以可以通过“关中断”指令关闭对中断的响应。由软件产生的“中断”则不同,它由专设的指令,在程序中有意地产生的。所以是主动的,“同步”的。被称为“陷阱”(trap)。当出现不当的操作,被称为“异常”,一般也是异步的,被动的。无论原创 2017-12-01 14:42:41 · 1032 阅读 · 0 评论 -
系统调用fork()、vfork()与clone()
系统调用clone()的主要用途是创建一个线程,可以根据参数选择性复制进程的资源。fork(),全面复制父进程的资源。vfork(),与父进程共享用户空间,当创建了子进程,子进程先运行,等子进程退出后父进程再运行(与execve()配合使用)。clone、fork、vfork都调用do_fork()。do_fork()中的标志位参数: // cloning flags:#de原创 2017-12-10 13:07:57 · 757 阅读 · 0 评论 -
系统调用brk()和mmap()
brk()的可见度不高,但brk()是常用的系统调度,用户进程通过它向内核申请空间。总是通过malloc来间接的用到brk(),如果把malloc想象成零售,那brk就是批发。由于每个进程的虚存空间都很大(3G),但实际需要使用的空间又很小,内核不可能在创建进程时就为整个虚存空间都分配号相应的物理空间并建立映射,而只能时需要用到多少才分配多少。在mm_struct结构中有一个成分brk,表原创 2017-11-14 10:59:22 · 1682 阅读 · 0 评论 -
内核缓冲区的管理
内核设置全局性的缓冲池为进程分配task_struct结构,这些小块存储不局限于某个子程序,并且动态变化。Linux采用slab的缓冲区分配和管理方法。在slab方法中,每种数据结构都有自已专用的缓冲队列,构造函数(创建并初始化),析构函数(撤销并释放);slab管理队列分为2级管理;第一级为cache_cache结构其中保存的都是kmem_cache_t结构(都是其他对象slab的队列头),原创 2017-11-09 10:09:53 · 867 阅读 · 0 评论 -
页面的换入
在i386CPU将一个线性地址映射成物理地址的过程中如果页面该地址的映射已经建立,但是发现相应页面表项或目录项中的P(present)标志位为0;表示相应的物理页面不在内存中。只有P标志位为0就都认为页面映射是失败的,其他字段没有意义。-- do_page_fault() > handle_mm_fault( ) > handle_pte_fault( )在 handle_pte_faul原创 2017-11-09 09:08:56 · 584 阅读 · 0 评论 -
物理页面的使用和周转
交换设备(通常是磁盘,也可以是普通文件)的每个物理页面也要在内存中有个相应的数据结构(或者说“户口”),不过相对简单一些,实际只是一个计数,表示该页面是否也被分配使用。以及有几个用户在共享这个页面。对盘上页面的管理是按文件或磁盘设备来进行的。内核中定义一个swap_info_struct数据结构,用以描述和管理用于页面交换的文件和设备。struct swap_info_stru原创 2017-10-27 17:44:48 · 606 阅读 · 0 评论 -
Linux下虚拟空间的管理
如果说物理空间是从“”供”供的原创 2017-10-23 16:16:12 · 350 阅读 · 0 评论 -
Linux下的地址映射
实地址模式:Intel在8086寄存器采用实地址模式:在CPU中设置四个“段寄存器” CS DS SS ES 分别用于可执行代码即指令,数据,堆栈和其他;每个段寄存器都是16位,对应地址总线的高16位。每条“访内指令”的内部地址都是16位。访内代码的内部地址(16位)转化成实际地址(20位);-->段寄存器中内基地址对于每一个由段寄存器的内容确定的“基地址”,一原创 2017-10-21 21:16:14 · 668 阅读 · 0 评论