课程学习总结报告

计算机的体系结构

从体系结构开始,因为要学习的是Linux操作系统分析,首先要对计算机体系结构有个整体的把握,老师从冯诺依曼体系结构开始,讲述了存储计算机工作原理,对计算机的内存,总线和硬盘做了一些基本的介绍。

汇编语言基础

汇编语言有两种,AT&T汇编和Intel汇编,而linux采用的是AT&T汇编,因为不同的CPU寄存器大小不一样,相应的汇编指令也会有所区别,以mov指令为例,movb指8位,movw中的w是指16位,movl中的l是指32位,movq中的q是指64位。为了更好的理解汇编语言,在这一部分还穿插了不同种类的寻址,寄存器寻址,立即寻址,直接寻址,间接寻址等

函数堆栈调用框架

这里介绍了和函数堆栈的框架和相关的call,push,ret,pop指令和一系列的寄存器,进一步加深了对函数调用和参数传递的理解,同时也对程序运行时堆栈的变化有了更深的理解

深入理解系统调用

系统调用是一种特殊的中断,和函数的传参不同,因为系统调用是从用户态到内核态,所以采用寄存器传递参数,当然由于压栈的方式需要读写内存,函数调用速度较慢,64位结构下普通的函数调用和系统调用都是通过寄存器传递参数,系统调用一般通过int $0x80的方式进行,系统调用的初始化就是将系统调用处理入口地址告诉CPU,系统调用的执行就是压栈关键寄存器,保存现场,恢复现场,最后返回

进程

谈到进程,首先我们要分析它的状态,实际的Linux内核管理的进程状态与操作系统原理中的状态是不一样的,分为TASK_RUNNING,TASK_INTERRUPTIBLE,TASK_UNINTERRUPTIBLE和终止态这九种状态,其中TASK_RUNNING可以代表就绪态和运行态,TASK_INTERRUPTIBLE,TASK_UNINTERRUPTIBLE则都是用来表示阻塞态。进程的存储结构是双向链表,准确的说是双向循环链表。

接下来谈到进程的创建,进程归根究底都是_do_fork()来创建的,所有进程都是从0号进程复制过来的,fork是进程创建的系统调用,复制当前进程创建当前进程的子进程,细节很多,这里不做展开。还介绍了进程的切换和系统的一般执行过程,介绍了进程上下文和中断上下文的区别,细节很多,干货满满,给老师点赞。

中断

中断是Linux系统中一个很重要的概念,绝大部分的进程调度也都是通过中断完成的,中断的类型有硬件中断,软件中断:故障,退出,陷阱,像我们前面说的系统调用,就是通过软件中断中的陷阱实现的,linux处理中断的过程是,硬件产生中断,中断控制器将其转换成中断向量,通过中断向量查询中断向量表,再将逻辑地址转换为物理地址,进入中断处理程序,处理完成后,返回原进程或进行进程切换。

总结

以上只是一个粗略的总结,老师讲授的内容非常丰富,有些内容其实弄得不太清楚,因为里面涉及到的函数比较多,一时也记得不太牢靠,在今后的日子中,还需要继续学习,因为这些知识在日后的工作学习中都是非常重要的。

你可能感兴趣的:(课程学习总结报告)