如何区分用户态和内核态呢?
从逻辑地址上来看的话,以32位地址举例,用户态位于3GB空间当中,而内核空间在3GB-4GB(并且是共享的).
进程的数据结构示例图,可以看到包含进程描述信息,内存管理,终端控制信息,文件描述符,文件系统以及信号相关的内容,
系统调用的执行过程:
1.用户程序中有一个系统调用
2.保护现场,然后陷入内核当中,接下来在内核中寻找查询系统调用表,找到对应的服务程序。
3.接下来服务程序执行完毕后恢复现场。
与正常的系统调用不一样?
fork()之后会有两个返回,对于父进程的返回过程与正常的系统调用类似,而对于fork()之后的子进程呢?
fork出来的子进程在哪里执行呢?fork()出来的子进程是从哪一行代码开始执行的?
可以看到几乎fork()就是一堆复制拷贝的操作而已,还有修改下一些基本的结构。(leetcode那些链表的复制就是实际应用了)