目录


概述

首先,回顾下linux的开机过程:

由此可见,linux启动之后,内核只是存在于内存中的程序,它和其他程序一样,都是被cpu调度执行的。那么,cpu的使用权什么情况下,会被交给内核,然后内核进行进程管理的呢?答案是:时钟中断。


cpu

cpu是一块超大规模的集成电路。它由运算器控制器组成。运算器主要由ALU(算数逻辑单元)、通用寄存器、状态寄存器组成。其中,ALU负责算数运算和逻辑运算;通用寄存器用来保存参与运算的操作数和运算所产生的中间结果;状态寄存器用来保存当前指令执行后的各种状态信息(比如,是否溢出)和控制信息(比如,是否允许中断)。
控制器是计算机的指挥中心,它是计算机能够自动化运行的根本。控制器是由指令寄存器IR、程序计数器PC和操作控制器OC组成的。其中:
操作控制器的功能是根据指令操作码和时序信号,产生控制信号,以便正确的建立数据通路(数据通路就是数字部件之间传送信息的通路),从而完成取指令和执行指令的控制。
程序计数器用来保存下一条指令的地址。每当指令被获取之后,PC中的地址都应该被修改为下一条指令的地址。因为,指令是顺序的存储在主存(代码段)中的,所以,对于流水线指令而言,修改PC的过程只是简单的对PC加“指令字节数”;对于跳转指令而言,后继指令的地址必须从IR的地址字段取得。因此,PC的结构具有寄存信息和计数两种功能。
指令寄存器用来暂存从主存中读出的正在执行的指令。指令是由操作码和地址码组成的。IR中相应的位会被送入指令译码器(操作码译码、变址译码等)。根据译码结果,即可向OC发出特定的控制信号。
控制器是控制部件,而运算器、存储器等属于执行部件。他们之间通过控制线进行联系。控制部件通过控制线向执行部件发送控制命令(就是,微命令),执行部件收到微命令后,所执行的操作叫微操作。微操作在执行部件中是组基本操作。


cpu中断

1,什么是中断
当系统中出现了一个必须由cpu立即处理的情况时,cpu需要暂停当前正在执行的程序,转而处理这个新的情况,这个过程就叫做中断。
中断分为硬件中断和软中断。
2,硬件中断
硬件中断是一个异步信号,它是由与系统相连的外设(比如,网卡,硬盘,键盘等)产生的。每个设备或设备集都有自己的IRQ(中断请求),cpu根据IRQ将中断请求分发给相应的中断处理程序。比如,当网卡收到一个数据包的时候,就会发出一个中断请求。
需要注意的是:硬件中断是可屏蔽的。当发生硬件中断时,cpu会暂停当前程序,转而执行中断代码,中断代码本身也可以被其他硬件中断中断。
3,软中断
软中断是由正在运行的程序发出的。它不会中断cpu。软中断是一种需要内核为当前正在运行的进程做一些事情(通常是I/O)的请求。
4,中断处理的上半部和下半部
在中断处理程序中,既想让程序运行的快,又想完成更多的工作。这两个目的是相矛盾的。因此,中断处理分为上半部和下半部。
上半部主要完成重要的、紧迫的、能够快速完成的、与硬件相关的工作。比如,当网卡收到数据包时,为了优化网络的吞吐量,它会立即发出中断请求,通知内核有新的数据包,内核通过执行网卡注册的中断处理程序,应答硬件,复制数据包到内存,读取更多的数据包。
下半部主要完成与中断处理密切相关的,但中断程序本身不执行的工作。比如,处理和操作网络数据包的工作。
硬件中断一般是上半部,软中断一般是下半部。


时钟中断

linux的0号中断是时钟中断,时钟中断是特别重要的中断,它是整个操作系统的“脉搏”。操作系统利用时钟中断,维持系统时间,更新cpu计数,也就是调用scheduler_tick递减进程的时间片,若进程的时间片递减到0,则进程被调度出去而放弃CPU的使用权。
时钟中断的物理产生原因是:操作系统对可编程定时/计数器进行有关初始化,之后,该定时器就会定期的产生输出脉冲,这个脉冲被送入cpu,就可以引发一个时钟中断。时钟中断的周期,称作tick(滴答)。从本质上说,时钟中断只是一个周期性的信号,完全是硬件行为,该信号触发cpu执行一个中断服务程序(ISR)。但是为了方便,称该服务程序为时钟中断。


参考文档