第四周

Posted 20135103王海宁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四周相关的知识,希望对你有一定的参考价值。

20135103王海宁

《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

程序员编程不可能很健壮,会出bug,假如写的程序可以任意控制计算机的资源会很危险,所以产生了OS内核态和

用户态两个概念。我们这周的实验就是关于操作系统的用户态、内核态切换以及中断。

 

先谈几点理解:

1)OS采用系统调用实现用户态进程与I/O进行交互,用户态下调用系统资源须采用系统调用。

2)从用户态进入内核态有2种方式:系统调用(trap陷入)、中断。

3)状态切换时会保存寄存器上下文,如用户态堆栈顶地址、当时的状态字、当时的cs:eip值。

4)system_ call是linux中所有系统调用的入口点,系统调用的参数由eax传递。


实验过程:
下面分别用两种不同的c代码,实现0x20号系统调用getpid来获取当前内核名称。

1.直接调用库函数API

技术分享
 
技术分享技术分享



2.使用内嵌汇编的c代码

技术分享

技术分享技术分享

 

分析:
    API函数getpid()中将系统调用封装好,执行int 0x80语句后即进入内核态中的System_call()。

System_call()中会执行中断服务程序sys_getpid(),中断服务完成后如没有进程间调度,则执行iret返回用户

态继续执行,如有进程间调度,则执行进程间调度。


 

总结:
    通过本周的学习,了解了系统调用与中断的关系,即系统调用的三层皮:xyz( API )、system_call( 中断

向量 )和sys_xyz( 服务程序 )。系统调用是一种特殊的中断,用eax放调用号码,ebx、ecx等放参数,eax放

返回值,int 0x80进入中断处理程序,此时进入内核态。

以上是关于第四周的主要内容,如果未能解决你的问题,请参考以下文章

linux内核分析第二周

第六周

沈向洋王海峰候选中国工程院院士!计算机领域7位入围增选

201771010124 王海珍 《实验六 继承定义与使用》第六章实验总结

软件工程第一章第13题-刘康宁

软件工程第一章第14题-刘康宁与缪东旭