进程/内核模式:
标准的unix系统cpu只运行在内核态或用户态
内核本身不是进程,而是进程管理者
进程进入内核态的几种方法:
1.系统调用
2.异常信号处理(包括中断处理)
3.直接运行内核线程
进程实现:
每个进程由进程描述符表示
进程描述符包含的几个主要寄存器:
1.PC(程序计数器),SP(栈指针寄存器)
2.通用寄存器
3.浮点寄存器
4.包含CPU状态信息的处理器控制寄存器
5.用来跟踪进程对RAM访问的内存管理寄存器
当CPU决定恢复执行某一个进程时,它用进程描述符中合适的字段来装载CPU寄存器,以为程序计数器PC中存放的值指向下一条要执行的指令。
可重入内核:
可重入函数,只能改变局部变量,不能改变全局变量。
可重入内核可以包含不可重入函数,利用锁或其他机制保证一次只有一个进程访问这个函数
内核控制路径:表示内核执行系统调用,异常或中断所执行的指令序列。
内核控制路径可以正常顺序被执行或者交错被执行。
进程地址空间:
每个进程在运行时都有自己的私有地址空间,进程在用户态和内核态使用的私有栈不同。
同步和临界区:
防止多个进程在竞争资源时发生死锁。
临界区是这样一段代码,进入这段代码的进程必须完成,之后另一个进程才能进入。
非抢占式内核:
比较安全,但是在多处理器上是低效的。
如果内核支持抢占,在进入临界区之前关闭抢占,离开时开打。
禁止中断:
进入临界区,关闭中断,离开时再打开。
信号量:
组成:
1.一个整数变量
2.一个等待进程链表
3.两个原子方法down() up()
每次访问数据结构时执行down方法对信号量的值减一当发现值小于0时则把该进程加入信号链表中然后阻塞该进程。
执行up方法对信号量的值加一当发现值大于等于0时则激活信号链表中的一个或多个进程。
自旋锁:
如果访问数据结构时间比较短,使用信号量比较低效,这时候可以用自旋锁。自旋锁和信号量比较相似,但是自旋锁没有进程链表。
当一个进程发现锁被其他进程锁住时,它就一直“旋转”,执行一个紧凑的循环指令直到锁打开。
自旋锁针对的是多处理系统。
信号和进程间通信:
信号:提供了把系统事件报告给进程的一种机制。
进程间通信:
1.信号量
2.消息队列
3.共享内存
共享内存是进程间通信最快的方式
进程管理,内存管理,设备驱动程序这三个后续详细描述。
总结:进程执行可分为内核态和用户态,多个进程同时执行时要避免死锁,以及对临界区访问要互斥。
内核大致的常用概念绪论基本都描述了,接着开始真正的内核深入学习。
深入理解linux内核(四) 绪论之UNIX系统概述
最新推荐文章于 2024-06-15 12:18:33 发布