Openstack前传二(操作系统原理)
来源:互联网 发布:ubuntu 备份系统 编辑:程序博客网 时间:2024/06/05 11:27
1. 进程是通过一个双向量表管理的。每个进程都是通过数据结构task_struct来管理的,也被叫做进程描述符。
每个进程的描述符是有关联性的,是个双向链表。 创建一个进程必须先建立一个描述符;如果删除的话,则从双向链表删除,则进程无法被跟踪了。
这个进程描述符包含:
1.进程状态;
2.线程信息;
3.内部标志;
4.内存映射相关信息;
5.父进程
6.tty
7.fs
8.signal
etc....
2.进程如何进行切换。
也叫做上下文切换。 A->B , A的进程描述符被挂起,则在CPU维持的信息被保存,这个过程是现场保存。这个信息是被保存在进程描述符中了。
B进程被调用为恢复现场,将堆栈信息或者指令指针重写入CPU。
3.Linux支持进程抢占。
根据优先级来排队。当然不是随时可以抢的,不然没天理了。Linux有内部的时钟tick,每一次tick上升沿产生一次时钟中断。
优先级低的一直不被运行,怎么办?那么首先看下进程类别:
1.Linux 进程类别:
交互型,IO密集型的。一般是优先级比较高的。
批处理进程,主要是CPU密集型的。优先级不太高,一般做守护进程。
实时性的,优先级特别高,必须马上运行。
分配策略:批处理类的,优先级低,但是CPU时间片高。
交互性的,优先级高,但是每次获得的时间很少。
优先级(Priority) :
实时优先级(1-99),数字越小,优先级越低。通常与内核相关的。
静态优先级(100-139)数字越小,优先级越高。
所有的实时优先级比静态优先级都高。即(1-99 > 100-139) 利用TOP可以查看每个进程的PR。
调度类别: FIFO (实时)
RR (轮转) (实时)
Other:用来调度100-139的进程。 (用户)
如何让进程达则兼济天下,所以引入动态优先级。如有一个进程长久未被运行,则【临时】调动其优先级。主要是对于100-139优先级的进程而言。
动态优先级算法:dynamic priorty = max (100 , min(static prority - bonus + 5 , 139));
手动调整用户优先级: nice N COMMAND.
renice -n # PID
调整实时(内核)进程优先级:
chrt --fifo
chrt --rr
系统启动:
Kernel -->init
然后使用fork()来创建子进程。最重要的是创建进程描述符(task_struct).
刚创建的时候,是和父进程指向同一位置。写时复制(COW),大大的减少进程创建的开销。但是实际上还是需要不少资源的。
- Openstack前传二(操作系统原理)
- Openstack前传一(计算机及操作系统原理)
- (操作系统原理)死锁原理
- 操作系统原理(三)
- 操作系统原理(四)
- 操作系统原理(1)
- 【OpenStack】OpenStack原理(二)——开发基础
- VxWorks操作系统基础,操作系统原理 (ZZ)
- OpenStack:开源云操作系统
- 【OpenStack】OpenStack原理(一)——OpenStack发展及架构
- OpenStack多节点部署(二)——操作系统安装
- 操作系统原理学习(一)
- 操作系统原理学习(二)
- 操作系统原理学习(三)
- 操作系统原理
- 操作系统原理
- 操作系统原理
- 操作系统原理
- Android获取dialog自定义布局中的控件
- 使用cpio解压initrd.img ----测试过
- python 使用pymssql连接sql server数据库
- UVA 847 - A Multiplication Game(博弈)
- POJ-3268(多源单点最短路 + 单源多点最短路)
- Openstack前传二(操作系统原理)
- Python(私有变量)类中的特殊方法
- ZOJ3612
- ios中单例模式
- APUE-文件与目录:以O_APPEND标志open的文件,lseek后读写问题
- Android App优化之延长电池续航时间
- 清空浏览器文件选择框中的值(清空 file input 的值)
- WPF入门
- 用批处理删除指定字符之前或之后的所有内容(FOR /F 中的Delims和Tokens总结)