课程学习总结报告

报告要求:

       请您根据本课程所学内容总结梳理出一个精简的Linux系统概念模型,最大程度统摄整顿本课程及相关的知识信息,模型应该是逻辑上可以运转的、自洽的,并举例某一两个具体例子(比如读写文件、分配内存、使用I/O驱动某个硬件等)纳入模型中验证模型。谈谈您对课程的心得体会,改进建议等。

 

Linux系统模型

       精简的Linux系统概念模型:Linux系统从应用角度来看,分为内核空间和用户空间两个部分。内核空间是Linux操作系统的主要部分,但是仅有内核的操作系统是不能完成用户任务的。丰富并且功能强大的应用程序包是一个操作系统成功的必要条件。
从用户空间转换到内核空间通过系统调用实现。

 

 

进程状态
进程状态一般有:就绪态,阻塞态,运行态
在Linux下:R运行状态,S睡眠状态,D磁盘休眠状态,T停止状态,X死亡状态

系统调用
        主要实现方式为:其实系统调用实质上就是一种特殊的中断。通过特定的软件中断(陷阱 trap)向内核发出服务请求,int $0x80和syscall指令的执⾏就会触发⼀个系统调⽤、并使用EAX寄存器传递系统调用号,然后根据系统调用号执行相应的内核处理函数。因为是中断因此也伴随着中断上下文的切换。

Linux系统的一般执行过程为:

  1). 正在运⾏的⽤户态进程X。
  2). 发⽣中断(包括异常、系统调⽤等),CPU完成load cs:rip(entry of a specific ISR),即跳转到中断处理程序⼊⼝。
  3). 中断上下⽂切换,具体包括如下⼏点:

  •     swapgs指令保存现场,可以理解CPU通过swapgs指令给当前CPU寄存器状态做了⼀个快照。
  •     rsp point to kernel stack,加载当前进程内核堆栈栈顶地址到RSP寄存器。快速系统调⽤是由系统调⽤⼊⼝处的汇编代码实现⽤户堆栈和内核堆栈的切换。
  •     save cs:rip/ss:rsp/rflags:将当前CPU关键上下⽂压⼊进程X的内核堆栈,快速系统调⽤是由系统调⽤⼊⼝处的汇编代码实现的。

  此时完成了中断上下⽂切换,即从进程X的⽤户态到进程X的内核态。
  4). 中断处理过程中或中断返回前调⽤了schedule函数,其中完成了进程调度算法选择next进程、进程地址空间切换、以及switch_to关键的进程上下⽂切换等。
  5). switch_to调⽤了__switch_to_asm汇编代码做了关键的进程上下⽂切换。将当前进程X的内核堆栈切换到进程调度算法选出来的next进程(本例假定为进程Y)的内核堆栈,并完成了进程上下⽂所需的指令指针寄存器状态切换。之后开始运⾏进程Y。
  6). 中断上下⽂恢复,与(3)中断上下⽂切换相对应。注意这⾥是进程Y的中断处理过程中,⽽(3)中断上下⽂切换是在进程X的中断处理过程中,因为内核堆栈从进程X切换到进程Y了。
  7). iret - pop cs:rip/ss:rsp/rflags,从Y进程的内核堆栈中弹出(3)中对应的压栈内容。此时完
成了中断上下⽂的切换,即从进程Y的内核态返回到进程Y的⽤户态。
  8). 继续运⾏⽤户态进程Y。

 

用户态切换到内核态的3种方式:

系统调用

      这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如前例中fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。

异常

        当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。

外围设备的中断

        当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。

文件系统

地基(低层)由一排排的文件柜组成,井然有序。文件柜里放置着“文件”--电脑中的文件。左上角,有一只向前挂着421号牌的小企鹅。它表示这PID(进程ID)为421的进程,他正在查看文件柜中的文件,这代表系统中正有一个进程在访问文件系统。在右下角有一只小狗,他是看门狗,这代表对文件系统的监控,可以说整个linux系统都是构建在文件系统之上的,Linux支持多种文件系统,包括ext2、ext3、vfat等等。Linux采用虚拟文件系统VFS来达到支持多种文件系统格式的目标。VFS为各类文件系统提供一个统一的操作界面和编程接口。向上提供统一的编程接口,向下对各种文件系统进行兼容。

"三大法宝"和"两把宝剑"

这是孟老师上课中的两个生动比喻,三大法宝:存储程序计算器、中断、函数调用栈;两把宝剑:中断上下文和进程中断上下文。

 

 

总结:

        通过学习《Linux操作系统分析》课程,自底向上,深入浅出,并通过结合具体例子进行原理分析,系统的了解了Linux操作系统的基本原理,包括Linux的初始化过程、零号进程的创建、系统调用的原理、进程的创建与切换、中断的原理、设备驱动等等。几乎涵盖了Linux操作系统最主要的功能,但各个部分并非完全独立工作而是互有交织,通过整理归纳所学知识构造概念模型,可以更加系统的认识Linux系统。

 

 

 

 

posted @ 2020-07-09 17:01  Sunmengjie  阅读(204)  评论(0编辑  收藏  举报