0x00背景
最近在看操作系统上的书 然后选了本知乎推荐的xv6
我们从这几个问题入手
操作系统作用是什么?
内核的作用是什么? 内核概念 - 一个向其他运行中程序提供服务的特殊程序。 内核的权限保护机制是什么?
0x01操作系统接口
不熟悉的接口
exec(filename,*argv)sbrk(n)read(fd,buf,n)write(fd,buf,n)dup(fd)pipe(p)chdir(dirname)mkdir(dirname)mknod(name,major,minor)fstat(fd)
进程和内存
shell
进程 –用户内存空间(指令,数据,栈) –进程状态(仅内核可见) 系统调用 exec 将从某个文件(通常是可执行文件)里读取内存镜像,并将其替换到调用它的进程的内存空间。
I/O 和文件描述符
文件描述符—作为进程(表的索引)
文件描述符和 fork 的交叉使用使得 I/O 重定向能够轻易实现。fork 会复制父进程的文件描述符和内存,所以子进程和父进程的文件描述符一模一样。 exec 会替换调用它的进程的内存但是会保留它的文件描述符表 利用文件描述符 重定向i/o
管道
管道是一个小的内核缓冲区,它以文件描述符对的形式提供给进程,一个用于写操作,一个用于读操作。
文件系统
文件系统提供文件和目录,文件就是一个简单的字节数组,而目录包含指向文件和其他目录的引用。
0x01第一个进程
进程是一个抽象概念,它让一个程序可以假设它独占一台机器。进程向程序提供“看上去”私有的,其他进程无法读写的内存系统(或地址空间),以及一颗“看上去”仅执行该程序的CPU。
内存布局
进程见的切换实际是由线程调度来调节
创建第一个地址空间
创建第一个进程
将控制权从用户转到内核是通过中断机制实现的,具体地说是系统调用、中断和异常。
运行第一个进程
让硬件在进程的内核栈中执行系统调用与中断。
The first system call: exec
mit: