课程学习总结报告
一、Linux系统
操作系统主要完成两个目标: 与硬件交互,为应用程序提供执行环境;
为了防止用户程序直接和硬件交互,将CPU分为两种执行模式, 称用户态和内核态;
Linux是一个多用户多任务的操作系统,一般主要有4个部分: 用户进程,系统调用接口,Linux内核,硬件;
本课程的重点主要是中断和进程管理;
1.1 用户进程
用户应用程序运行在整个系统的最高层,当他在系统上运行的时候,就会成为操作系统的一个进程;
1.2 系统调用接口
在应用程序中,通过系统调用来调用操作系统内核中特定的过程,实现特定的服务。
1.3 Linux内核
linux内核是整个系统的核心, 负责启动并运行程序,磁盘上文件管理,内存管理等。
Linux内核主要由以下5个子系统组成,可以看出主要包含内存管理,进程管理,设备驱动管理,文件系统,网络管理等功能模块。
1.4 硬件
包括了linux安装需要的所有可能的物理设备,如CPU,内存,硬盘等。
二、 中断
中断是一种由软件或硬件产生的、向CPU发出的事件。
例如,当用户按下某个键,外部设备会发出一个中断请求,产生一个中断信号,信号通过设备控制器的IRQ线发送给中断控制,
而中断控制器与CPU相连, CPU收到该信号后,会响应该中断。
从按下键盘到CPU响应中断的大致过程:
0. 外设产生信号,并传送到I/O接口上,接口通过设备驱动程序向中断控制器发送中断请求
1. 中断控制器将中断信号转换为中断向量给CPU读取
2. CPU通过中断向量号,到中断描述符表IDT中找到对应的中断描述符
3. 通过中断描述符,从全局描述表中找到对应的段描述符,获得中断处理程序的入口地址
4. 确定中断的发生源和优先级, 判断特权级是否发生变化
6. 进入中断处理程序, 中断处理程序会先在内核态的堆栈中保存一些寄存器的值,也就是保存现场
7. 处理程序给PIC发送应答,允许其进一步发出中断
8. 执行设备对应的中断服务例程ISP
ISP解析键盘命令,获得对应数据,送入内存等
9. ISP执行结束,恢复现场,中断返回,返回被中断进程下一条指令处继续执行
以上是I/O中断处理过程,除了硬中断,还有软中断,
比如户进程执行一个fork()函数,会触发系统调用, 系统调用就是由软中断实现的
以系统调用看中断上下文切换:
1. C库函数执行,将系统调用号传给eax寄存器,之后通过int $0x80产生中断向量为128的编程异常(trap)
2. 切换到内核态后,通过系统调用号找到对应的系统调用处理程序的入口地址
3. 之后由硬件先自动保存一些寄存器的值入内核栈,包括ss,esp,eflags, cs, ip(保存CPU执行的上下文)
4. 执行系统调用服务例程,先保存现场,在执行
5. 执行完后,恢复现场中断返回
三、进程管理
3.1 进程
当用户程序在系统上运行的时候,就是进程,
一个程序可以对应多个进程
进程主要是动态的,存在生命周期,是暂时的
进程实体 = 进程控制块PCB + 程序段 + 相关数据段
每个进程有自己独立的地址空间
3.1 PCB
PCB实际上是一个task_struct的数据结构, 它是进程存在的唯一标识
该结构在进程被创建的时候由系统为其创建,在进程运行结束时候,系统撤销PCB
task_struct中保存了与进程相关信息,如state进程状态,fs是可执行映像的文件系统,
thread_info与进程描述符关联等。
3.2 进程状态
进程状态有可运行,等待,暂停,僵死,状态之间也会进行相互转换
就绪和运行都属于可运行状态,通过双向循环链表将可运行态进程连接组成运行队列
每个CPU都有运行队列,通过运行队列,可以加快进程的调度
3.3 进程栈和进程切换
linux系统为每个用户进程分配了两个栈: 用户栈,内核栈
进程运行在用户模式下就是使用的用户栈,内核模式下就是使用的内核栈
当进程切换到另一个进程时候,就会产生进行上下文的切换
进程切换包含两步:
1) 切换页全局目录安装新的地址空间;
2) 切换内核态堆栈和硬件上下文;
在上面系统调用中,在中断处理程序执行完返回之前,可能调用schedule()函数调用其它进程
从而发生进程上下文的切换, 即进程的上下文切换通常嵌套在中断上下文切换中
调用关系: schedule() --> context_swtich() --> switch_to --> __switch_to()
context_swtich()完成切换第一步,switch_to和__switch_to完成第二步
硬件上下文:
进程恢复执行前必须装入寄存器的一组数据称为硬件上下文切换
硬件上下文提供了内核执行新进程前所需要的所有信息
在切换的时候,会保存prev进程的上下文,并用next硬件上下文代替prev
五、课程的体会
通过linux操作系统分析这们课程,更深入理解了linux操作系统的运作机制;
结合对内核源码的解读以及实验,理解了中断和进程切换,明白进程切换和中断上下文切换的不同;
从硬件到内核编码实现,对于linux系统的整体理解更体系、更深入,也很感谢老师的耐心教导。