进程
地址空间是允许进程引用的内存地址集合
程序和进程的区别
1、几个进程能并发地执行同一程序,同一进程能顺序执行几个程序
软链接和硬链接
2.当文件由一个进程创建时,该文件的id就是进程的id,同理,用户组ID也一样
3.当一个程序在用户态下执行时,他不能直接访问内核数据和内核程序,然而,当用户程序在内核态下运行时,这些限制不再有效
用户态切换到内核态,调用system call 或者硬件中断,内核态切换到用户态,定时中断或者调度程序在内核态被激活。
cpu交错执行内核控制路径
1.运行在用户态下的进程调用一个系统调用,而相应的内核控制路径证实这个请求无法立即得到满足,然后,内核控制路径调度程序选择一个新的进程投入使用,这种情况下,是两个控制路径控制两不同进程。
2.当运行一个内核控制路径时,cpu检测到一个异常(如,访问一个不在ram里面的页),第一个控制路径被挂起,而cpu开始执行合适的过程,这时候要分配一个新页,这种情况下,是两个控制路径控制一个进程。
3.当cpu正在运行一个启用了中断的内核控制路径时,一个硬件中断发送,第一个内核控制路径还没执行完,cpu开始执行另一个内核控制路径来处理这个中断,当这个中断处理程序终止时,第一个内核路径恢复,这个情况下,两个内核控制路径运行在同一个进程的可执行上下文中。
4.抢占式调度,优先级更高的抢占。
同步机制
如果内核控制路径对某个内核数据结构进行操作时被挂起,其他内核控制路径就不能对其操作,除非它被设置成一致性状态,否则,两个控制路径的交互作用会破坏所存储的信息
如果内核支持抢占,在应用同步机制时,确保进入临界区前禁止抢占,退出临界区启动抢占
信号量
一个整数对象
一个等待进程的链表
两个原子方法:down()和up()
down()方法对信号量的值减一,如果这个新值小于0,该方法就把正在运行的进程加入到这个信号量链表,然后阻塞该进程,up()对信号量加1,如果这个新值大于或等于0,则激活这个信号量链表的一个或多个进程
系统不允许在不同cpu上运行的内核控制路径同时访问某些内核结构,在这种情况下,如果修改数据结构所需的时间比较短,那么,信号量是很低效的,为了检测信号量,内核必须把进程插入到信号量链表里,然后挂起它。
自旋锁
当一个进程发现锁被另一个进程锁着时,它就不停的旋转,执行一个紧凑的循环指令直到锁打开。
自旋锁在单处理器环境下是无效的,当内核控制路径试图访问上一个上锁的数据结构时,它开始无休止循环,因此,内核控制路径可能因为正在修改受保护的数据结构而没有机会继续执行,也没有机会继续执行,也没机会释放这个自旋锁,最后的结果就是系统挂起
描述每个进程的数据结构都包含两个指针,一个指向它的父进程,一个指向它的子进程。