您的位置:首页 > 运维架构 > Linux

深入理解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

- 进程虚拟地址空间处理,调页分配策略

- 高速缓存

- 设备驱动程序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: