进程管理
使用fork创建子进程,创建子进程时会将父进程拥有的数据结构+代码拷贝一份,然后通过execve系统调用来执行另外一个程序,替换掉数据。
fork系统调用的返回值,子进程返回值为0,父进程返回值为子进程的pid。
waitpid 父进程将子进程的pid传给系统调用,知晓子进程运行成功与否
内存管理
代码段:程序代码部分。
数据段:在运行中产生的数据,例如局部变量或者动态分配、保存一段时间的数据在堆。
内存分配:进程使用时需要内存时才会向内存管理申请分配内存。两种方式brk和mmap。
brk:内存分配数量较小使用brk,和原来堆的数据连在一起。
mmap:分配内存数量较大,重新划分一块区域。
文件管理
对文件的打开(open),关闭(close),创建(create),跳转(lseek),读(read),写(write)等操作。
每个文件通过文件描述符索引操作。每个文件中有自己的索引节点,因为大的文件时分割成一个个小格分散保存的,通过索引节点按顺序跳。
信号处理
信号会打断进程,一般例如"CTRL+C","kill",硬件故障等问题都会有信号处理。
每种信号都拥有默认动作进行处理;或者说通过信号处理函数sigaction系统调用,注册一个一个信号处理函数。
进程间通信
消息队列:数据不长的消息可以使用消息队列。
msgget:创建一个新的队列
msgsnd:生产者将消息发送到消息队列
msgrcv:消费者从队列中取消息
共享内存:消息量较大的时候可以使用,减少消息拷贝的开销。
shmget:创建共享内存块
shmat:将共享内存映射到自己的内存空间
需要处理“竞争问题”,出现信号量(Semaphore)机制。
sem_wait:访问前先调用,无人访问会先占用信号量。
sem_post:释放这个信号量。
网络通信
TCP/IP网络协议栈:不同机器间通信的一个标准协议。通过Socket系统调用建立通信。
其它系统调用相关
更多的系统调用查看源码,根据unistd_64.h文件查看
#define __NR_restart_syscall 0
#define __NR_exit 1
#define __NR_fork 2
#define __NR_read 3
#define __NR_write 4
#define __NR_open 5
#define __NR_close 6
#define __NR_waitpid 7
#define __NR_creat 8
...
中介与Glibc
一个封装了操作系统提供的系统服务的开源标准C库,是对系统调用的封装。
for example:打开文件系统sys_open函数对应的就是Glibc中的open函数。
总结

一本外国教材OSTEP(Operating System Three Easy Picies)可以作为理论层面的补充。
参考文献
极客时间趣谈linux操作系统《05 | 学会几个系统调用:咱们公司能接哪些类型的项目?》
一些思考
关于fork的一些思考:为什么fork调用会返回两次,知乎上的一些回答