摘要: 同时满足以下4个条件便发生死锁: 1. 互斥:至少存在一个资源非共享,那么申请进程必须等到该资源被释放才能结束。 2. 占有并等待:一个进程必须占有至少一个资源,并等待另一个被其他进程占有的资源。 3. 非抢占:资源被占有后不能被其他进程抢占,只能等到该进程结束后释放。 4. 循环等待:有一组进程{ 阅读全文
posted @ 2017-03-23 20:27 poluner 阅读(121) 评论(0) 推荐(0) 编辑
摘要: exit()退出进程前执行注册的退出处理函数,同时刷新流缓冲区。 _exit()不调用注册函数,直接退出进程。 return用于返回当前函数,在main函数里面,return 0;和exit(0)完成的功能一样。 阅读全文
posted @ 2017-03-23 16:43 poluner 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 逻辑地址:程序所生成的地址。 物理地址:物理内存的地址。 逻辑地址经过内存管理单元MMU转换成物理地址,逻辑地址加上基地址寄存器的值便得到物理地址。 阅读全文
posted @ 2017-03-23 16:22 poluner 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 原文链接 特点:在生成可执行文件的时候(链接阶段),把所有需要的函数的二进制代码都包含到可执行文件中去。因此,链接器需要知道参与链接的目标文件需要哪些函数,同时也要知道每个目标文件都能提供什么函数,这样链接器才能知道是不是每个目标文件所需要的函数都能正确地链接。如果某个目标文件需要的函数在参与链接的 阅读全文
posted @ 2017-03-23 15:42 poluner 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 1. 切换页目录 2. 切换内核栈和硬件上下文 1. 不需要切换页目录,因为线程在同一个进程中,虚拟空间是相同的 2. 切换内核栈和硬件上下文 线程私有的东西:程序计数器pc、寄存器组、栈、私有数据TSD(如errno)。 阅读全文
posted @ 2017-03-23 15:30 poluner 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 1. 无名管道PIPE 作用:情缘关系进程间通信。 原理:是内核中一种特殊的临时文件,用完自动消失,数据采用循环队列的方式在进程间传递。 2. 有名管道FIFO 作用:任意进程间通信。 原理:是文件系统中特殊的永久文件,用完不会消失,但作用仅仅是拥有一个磁盘路径这样的接口,而通信的信息存只放在内存中 阅读全文
posted @ 2017-03-23 15:29 poluner 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 进程切换分两步1.切换页目录以使用新的地址空间。2.切换内核栈和硬件上下文。对于linux来说,线程和进程的最大区别就在于地址空间。对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的。所以明显是进程切换代价大 线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是相 阅读全文
posted @ 2017-03-23 14:04 poluner 阅读(4321) 评论(0) 推荐(0) 编辑
摘要: 原文链接 1.进程的堆栈 内核在创建进程的时候,在创建task_struct的同时,会为进程创建相应的堆栈。每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针 阅读全文
posted @ 2017-03-23 13:25 poluner 阅读(577) 评论(0) 推荐(0) 编辑