深入理解Linux内核3
2017-11-01 15:03
204 查看
Unix内核概述
Unix内核提供了应用程序可以运行的环境,因此,内核必须实现一组服务及相应的接口。应用程序使用这些接口而不会跟硬件资源直接交互。- 进程/内核模式
用户态和内核态进程是动态的实体,在系统内通常只有有限的生存期
内核本身不是一个进程,而是进程的管理者
-请求内核服务的进程使用系统调用
除了用户进程,还有些称为内核线程的特权进程
以内核态运行在内核地址空间
不与用户交互,不需要终端设备
通常系统创建时启动,然后一直处于活跃状态
激活内核例程的几种方式
系统调用
正在执行进程的CPU发出一个异常信号
外围设备向CPU发出一个中断信号
内核线程被执行
进程实现
每个进程有一个进程描述符(包含有关进程的当前状态的信息)当内核暂停一个进程执行时,把几个相关处理器寄存器保存在进程描述符中
程序计数器PC,栈指针sp寄存器
通用寄存器
浮点寄存器
包含CPU状态信息的处理器控制寄存器(处理器状态字)
跟踪进程对RAM访问的内存管理寄存器
内核恢复一个进程执行时,用进程描述符中的合适字段装载CPU寄存器
等待状态可能会有很多,有进程描述符队列实现、
可重入内核
所有Unix内核都是可重入的(若干个进程可以同时在内核态下执行)可重入的一种方式是编写函数,至修改局部变量。
内核也可以包含非重入函数,利用锁机制来保证有且只有一个进程执行非重入函数
内核控制路径(指令序列)
内核控制路径交错执行
进程地址空间
每个进程运行在自己的私有地址空间用户态下涉及私有栈、数据区和代码区
内核态下,进程访问内核的数据区和代码区,但使用另外的私有栈
每个内核路径都引用自己的私有内核栈
有时候也会共享部分地址空间
同步和临界区
一致性状态抢占式和非抢占式内核
禁止中断
信号量
组成:一个整数变量、一个等待进程的链表和两个原子方法(down()和up())。
自旋锁(检查信号量耗时多,对于时间较短的操作较低效)
跟信号量很相似
但是没有进程链表
但处理器环境下无效
避免死锁
信号和进程间通信
信号量消息队列
共享内存
IPC资源是持久不变的
进程管理
fork()和_exit()系统调用分别创建一个新进程和终止一个进程exec()类系统调用装入一个新程序
fork()的进程是父进程,而新进程是它的子进程。
父子进程可以互相找到对方
每个进程的数据结构中有两个指针,一个指向父,一个指向子
写时复制技术
僵死进程
父进程等待子进程结束,wait4()系统调用init的特殊系统进程,系统初始化时创建
当一个进程终止时,内核改变它的所有子进程的进程描述符指针,成为init的孩子
进程组和登录会话
进程组(作业的抽象)登录会话通常是shell进程为用户创建的第一条命令
一个登录会话可以让几个进程组同时处于活动状态
bg和fg命令的使用
内存管理
重点- 虚拟内存
- 随机访问存储器RAM的使用
- 内核内存分配器KMA
- 进程虚拟地址空间处理,调页分配策略
- 高速缓存
- 设备驱动程序
相关文章推荐
- 深入理解Linux内核-系统调用
- 关于学习Linux的经典书籍 (深入理解Linux内核、Linux设备驱动程序等)
- 读深入理解Linux内核 (第4章 中断和例外)
- 深入理解linux内核-ch01
- 【深入理解Linux内核】《第一章 绪论》笔记
- 关于学习Linux的经典书籍 (深入理解Linux内核、Linux设备驱动程序等)
- 关于学习Linux的经典书籍 (深入理解Linux内核、Linux设备驱动程序等) .
- 读深入理解Linux内核 (第7章 进程调度)
- 深入理解Linux内核学习笔记
- 深入理解linux内核之文件系统分析二
- 深入理解Linux内核个人小结12---虚拟文件系统
- 深入理解Linux内核(4)---中断和异常(x86平台)
- 深入理解LINUX内核--学习笔记
- 关于学习Linux的经典书籍 (深入理解Linux内核、Linux设备驱动程序等)
- 深入理解linux内核-ch02
- 《深入理解Linux 内核》 chap 1 绪论
- 读深入理解Linux内核 (第9章 进程地址空间, 第二部分 ---- 内存区域)
- 深入理解Linux内核第二版-注-进程切换
- 深入理解l内核v4l2框架之video for linux 2
- 深入理解linux内核之(二)进程