OS面经
进程和线程
进程是程序的一次执行,进程是资源分配的最小单位,线程是cpu运行的最小单位,一个进程里可以包含多个线程
进程线程的切换
进程切换需要切换页目录和新的地址空间,切换内核栈和上下文
线程切换只切换栈和上下文
进程
一个进程能有几个堆,几个栈
堆有一个,栈各线程独占
进程的通信方式
父子进程 管道
无亲缘进程 有名管道
消息队列 消息队列中的消息有类型,读的时候可以按某种类型筛选
共享存储 效率高,少量数据拷贝,共享内存在内存里开辟一个空间,每个内存映射进来;
mmap是在进程的内存里
信号量 进程同步互斥,用于有序的访问某个资源
信号 通知某个进程事件发生
socket
如何创建进程
fork()创建一个就绪态的进程,然后会进入系统调用sysfork,在内核态调度,之后sysclone,sysclone调用copyprocess复制一份父进程除了stack指针以外的全部信息,子进程记录父进程的标志,设置子进程的堆栈,之后调用schedfork把子进程状态设置为running然后调用copythread来复制线程,复制寄存器的值以及父进程的环境,然后子进程从父进程中分离出去,子进程有了pid号,之后就是wakeupnewtask子进程开始执行。
但实际上,由于copy on write原理,fork之后&#