Linux操作系统原理笔记

在Linux操作系统内核内部,进程是通过一个链表,而且是一个双向链表来管理的。
进程描述符:每一个进程都有其描述符,每一个描述符彼此之间都有关联性的。
双向链表:
一个进程内部可能包含多个线程。

上下文切换(Context swtch)

假如说进程A从当前CPU上被拿走,切换成进程B,进程A有自己的描述符(task_struct),且被挂起。被Suspend(栈指针),CPU内部,包括指令计数器等保存下来。
保存在进程描述符文件当中。而进程描述符是由内核维持。所以这些信息都保存在内核中。
当A进程被切换出去,就意味着B进程被调度上来。这一过程被叫做恢复线程(Resume)
总的过程就叫做上下文切换。
进程A------CPU------进程B
上下文切换由谁完成?----由内核。
这意味着:
每一次进程切换都要先从用户空间转到内核模式,然后再到用户模式。
注意:不可能由一个进程到另一个进程,必须由内核来指挥完成。
所以CPU的整体时间就分为两部分:
一部分是用户空间所有进程加起来的计的时间
另一部分是内核空间所占用的时间
不管是那个进程,CPU总是分配到用户空间一部分,又分配到内核空间一部分。
Linux支持进程抢占。
优先级高的可以抢占优先级低的。
但不是随时都可以抢占,-------系统时钟。
系统时钟:
有内部的时间频率。
Tick:滴答----时间解析度
操作系统是怎么记录时间的?
每一次滴答(tick),都会产生可抢的时钟中断。
滴答来了,就可以抢了。
Linux的进程类别:
1、 交互式进程(IO密集型):等待IO,对CPU要求量特别小。
2、 批处理进程(CPU密集型):也可以理解成守护进程。
3、 实时进程(Real-time):随时运行,优先级非常高的进程
对于PC(桌面):交互式进程优先级应该是高优先级的,IO,,,,,
对于服务器来说:一般以批处理为主(CPU)
现在很多调度器可以这样来实现:
让批处理进程多一些时间片。----时间片比较大,但优先级低。
而交互式进程时间片少,但优先级高。
调度就是按照优先级来完成的。
Top命令是用来显示系统运行的进程信息。
Linux优先级:
1、 实时进程优先级:1-99 数字越小,优先级越低。通常与内核相关。
2、 静态优先级:通常用来描述用户进程优先级。
100-139 数字越小,优先级越高。
所以优先级范围是1-139
实时优先级比静态优先级高。
很显然,内核进程通常都是实时优先级。
TOP


显示RT的为实时进程。
Linux操作系统原理笔记的更多相关文章
- 深挖计算机基础:趣谈Linux操作系统学习笔记
参考极客时间专栏<趣谈Linux操作系统>学习笔记 核心原理篇:内存管理 趣谈Linux操作系统学习笔记:第二十讲 趣谈Linux操作系统学习笔记:第二十一讲 趣谈Linux操作系统学习笔 ...
- Linux操作系统原理
Linux操作系统原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.计算机经历的四个时代 1.第一代: 真空管计算机,输入和输出:穿孔卡片,对计算机操作起来非常不便,做一件事 ...
- Linux操作系统学习笔记
关于Linux详细介绍可以参见:http://blog.csdn.net/hguisu/article/details/6122513 关于Linux的常用命令可以参见:http://blog.csd ...
- 趣谈Linux操作系统学习笔记:第二十讲
一.引子 1.计算两方面的原因 2.内存管理机制 二.独享内存空间的原理 1.会议室和物理内存的关系 和会议室一样,内存都被分成一块块儿的,都编号了号,例如3F-10就是三楼十号会议室.内存页有这样一 ...
- 趣谈Linux操作系统学习笔记:第二十五讲
一.mmap原理 在虚拟内存空间那一节,我们知道,每一个进程都有一个列表vm_area_struct,指向虚拟地址空间的不同内存块,这个变量名字叫mmap struct mm_struct { str ...
- 趣谈Linux操作系统学习笔记:第二十六讲
一.内核页表 和用户态页表不同,在系统初始化的时候,我们就要创建内核页表了 我们从内核页表的根swapper_pg_dir开始找线索,在linux-5.1.3/arch/x86/include/asm ...
- 趣谈Linux操作系统学习笔记:第二十七讲
一.文件系统的功能规划 1.引子 咱们花了这么长的时间,规划了会议室管理系统,这样多个项目执行的时候,隔离性可以得到保证. 但是,会议室里面被回收,会议室里面的资料就丢失了.有一些资料我们希望项目结束 ...
- 白话linux操作系统原理
虽然计算机相关专业,操作系统和计算机组成原理是必修课.但是大学时和真正从事相关专业工作之后,对于知识的认知自然会发生变化.还很有可能,一辈子呆在学校的老师们只是照本宣科,自己的理解也不深.所以今天我站 ...
- 趣谈Linux操作系统学习笔记:第二十一讲
一.分段机制 1.分段机制的原理图 2.段选择子 3.段偏移量 例如,我们将上面的虚拟空间分成以下 4 个段,用 0-3 来编号.每个段在段表中有一个项,在物理空间中,段的排列如下图的右边所示. 4. ...
随机推荐
- python函数参数的传递、带星号参数的传递
python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...
- git branch/meger step(3)
# update last repositories git pull git log # create yourself repositories base on last repositories ...
- NSObject和反射2
NSObject和反射2. commend +R run id stu=[Student student]; // –> Student *stu=[Student student]; : ...
- 浅谈C语言和C++中“类”的区别
在C语言中,没有“类”的概念,但是可以由结构体struct构造出我们所需要的数据类型,struct可以组合不同的数据类型,可以看作是C语言中的“类”. 下面是C语言中的结构体的实例. #include ...
- 利用Python脚本完成一个Fat-tree型的拓扑
利用Python脚本完成如下图所示的一个Fat-tree型的拓扑(交换机和主机名需与图中一致,即s1~s6,h1~h8) 参考资料 修改代码如下: from mininet.topo import T ...
- Leetcode题目48.旋转图像(中等)
题目描述: 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1 ...
- js创建链表
首先要明确,我们为什么要创建链表呢?数组的大小是固定的,从数组的起点或中间插入或移除的成本很高,因为需要移动元素.尽管JS的Array类方法可以做这些,但是情况也是这样.链表存储有序的元素集合,但不同 ...
- react-hook的简单的动画插件react-simple-animate(其实是react插件,但是这里只介绍react-hook的简单用法)
1.useAnimate(普通anima动画的形式) (1)js const animate = useAnimate({ complete: { display: 'none' }, //动画完成的 ...
- Java-NIO 之 Buffer 与 Channel
NIO:一种同步非阻塞的 I/O 模型,也是 I/O 多路复用的基础. 同步与异步 同步:发起一个调用后,被调用者未处理完请求之前,调用不返回. 异步:发起一个调用后,立刻得到被调用者的回应表示已接收 ...
- java读取XML文件,及封装XML字符串
package com.yyl.text; import java.io.FileInputStream; import java.util.ArrayList; import org.junit.T ...