参考
linux下的系统调用流程
linux内核精讲
深度解读:一文看懂Linux内核
《Linux内核设计与实现》
《鸟哥的Linux私房菜》
操作系统层次结构
最外层是应用程序及shell,然后是操作系统的服务层即所谓SystemCall,第三层是操作系统的内核,最内层是硬件及驱动。
系统调用流程
- 应用程序在用户态下调用系统提供的API。
- API将对应的系统调用号保存到eax中,保存后使用int 0x80触发中断。
- 进入中断处理函数,在其中进行系统调用,此时处于内核态。
- 返回中断处理函数,将返回值保存在eax中,并从内核态切换到用户态。
- API函数从eax中取出值并进行判断、处理。
内核下的五个模块
进程调度模块
功能:使用各种调度策略控制进程对CPU资源的使用。
内存管理模块
确保所有进程安全地共享机器的内存,并提供虚拟内存机制的支持。
文件系统模块
用于支持对外部设备(如磁盘)的驱动和存储。
进程间通信模块
控制不同进程在用户空间的同步、数据共享及交换。
网络接口模块
提供对各种网络标准的实现和各种网络硬件的支持。
BIOS
存放于ROM中,主要功能是用于计算机开机时执行系统各部分的自检,建立OS需要使用的各种配置表(如中断向量表、硬盘参数表等)初始化处理器和系统其它部分。
计算机系统上电或复位时,CPU代码指针指向0xFFFFFFF0的位置,即系统ROM BIOS存放的始址。
内核编程语言及环境
as86汇编器
产生16位代码,使用配套的ld86链接器。
用于创建16位的启动引导扇区程序boot/bootsect.s
和实模式下的初始设置程序boot/setup.s
的二进制执行代码。