原文链接:https://blog.csdn.net/zhouzhaoxiong1227/article/details/6866724
原文链接:https://blog.csdn.net/zhouzhaoxiong1227/article/details/6870209
原文链接:https://blog.csdn.net/zhouzhaoxiong1227/article/details/6873570
Q1. 为什么把进程的地址空间划分为“内核空间”和“用户空间”?
A:
Linux的虚拟地址空间的大小为4GB,内核将这4GB的空间分为两部分,较高的1GB(虚地址0xC0000000到0xFFFFFFFF)供内核使用,称为“内核空间”;而较低的3GB(虚地址0x00000000到0xBFFFFFFF)供各个进程使用,称为“用户空间”;因为每个进程可以通过系统调用进入内核,因此,内核空间由系统内的所有进程共享;于是,从具体进程的角度来看,每个进程都可以拥有4GB的虚拟地址空间(也叫做虚拟内存)。
Q2. Linux是如何实现“请求调页”的?
A:
如果被访问的页不在内存,也就是说,这个页还没有被存放在任何一个物理页面中,那么,内核分配一个新的页面并将其适当地初始化,这种技术称为“请求调页”;
“请求调页”是一种动态内存分配技术,它将页面的分配推迟到不能再推迟为止,也就是说,一直推迟到进程要访问的页不在物理内存时为止,由此引起一个缺页异常;该技术的引入主要是因为进程开始运行时并不访问其地址空间中的全部地址。
Q3. 什么是中断?什么是异常?二者有何不同?
A:
中断控制是为克服对I/O接口采用程序查询控制服务方式所带来的处理器低效率而产生的,它的主要优点是只有在I/O接口需要服务时才能得到处理器的响应,而不需要处理器不断地进行查询;因此,最初的中断全部是对外部设备而言的,称为外部中断(或硬件中断);
异常也叫做内部中断,它是为解决机器运行时所出现的某些随机事件及编程的方便而出现的;
256种中断分为外部可屏蔽中断(INTR)和外部非屏蔽中断(NMI),所有I/O设备产生的中断请求(IRQ)均引起可屏蔽中断,而紧急事件(如硬件故障)引起的故障则产生非屏蔽中断;
异常又分为故障(fault)和陷阱(trap),它们的共同特点是既不使用中断控制器,又不能被屏蔽(异常其实是CPU发出的终端信号)。
Q4. 什么是中断向量?Linux是如何分配中断向量的?
A:
为使处理器可以容易地识别每种中断源,将256种向量中断从0到255进行编号,即赋以一个中断类型码n,把这个8位的无符号整数叫做向量,即中断向量;
Linux对256个中断向量的分配如下:
A. 编号为0~31的向量对应于异常和非屏蔽中断;
B. 编号为32~47的向量(即由I/O设备引起的中断)分配给可屏蔽中断;
C. 剩余的、编号为48~255的向量用来标识软中断;Linux只用其中的一个(即128或0x80向量)来实现系统调用。
Q5. 什么是中断描述符表?什么是门描述符?
A:
在实地址模式下,CPU将内存中从0开始的1KB空间作为一个中断向量表,表中每个表项占4个字节;但在保护模式,由4个字节的表项构成的中断向量表满足不了要求;因此在保护模式下,中断向量表中的表项由8个字节组成,中断向量表也改称为中断描述符表(IDT);
IDT中的每个表项叫做一个门描述符(gate descriptor)。
Q6. 门描述符有哪些类型?它们有什么不同?
A:门描述符中类型码占3位,表示门描述符的类型,主要分为以下几类:
中断门(interrupt gate):其类型码为110,包含了一个中断或异常处理程序所在段的选择符和段内偏移量;
陷阱门(trap gate):其类型码为111;
系统门(system gate):是Linux内核特别设置的,用来让用户态的进程访问陷阱门。
Q7. 什么是系统调用?为什么要引入系统调用?
A:
操作系统为用户态的进程与硬件设备(如CPU、磁盘和打印机等)之间的交互提供了一组接口,这些接口使得程序更具有可移植性,因为不同的操作系统只要所提供的一组接口相同,那么在这些操作系统之上就可以正确地编译和执行相同的程序,这组接口就是所谓的“系统调用”;
引入系统调用的原因有:
A. 这使得编程更加容易;
B. 这极大地提高了系统的安全性;
C. 最重要的一点,这些接口使得操作系统更具有可移植性。