一、OS的管理
1.1操作系统宏观的理解
OS的本质是一款进行资源管理的软件
图示:
1.2OS存在的意义
1.2.1计算机的分层式管理结构
最底层的硬件部分遵循“冯诺依曼体系” ,每一种硬件都在驱动层中有着自己对应的“驱动程序”
在OS中,驱动管理部分直接与驱动层对接
1.2.2为什么要有OS
①OS对下进行软硬件资源的管理,确保可以进行稳定的,高效的,安全的调用(手段)
②OS对上要给用户提供一个稳定的,高效的,安全的运行环境(目的)
1.3OS是如何进行管理的
1.3.1下三层(操作系统--驱动--硬件)的管理方式
类比于学校校长管理学生:
管理的本质是对学生数据的管理,而学生数据的信息可以从辅导员处获取
此时的学生数据数量太多依旧难以管理,此时就需要借助先“设计一个对象,并将其每个学生数据分别与之对应起来”,再“利用数据结构(如链表)把对象管理起来”的思想,
将学生的管理转化为“链表的增删查改”
这一思想,此时我们称“对学校学生管理工作完成了一个计算机层面的建模工作”
回头看操作系统硬件管理上:
①把每一个硬件分别创建一个对象来汇总数据,再把对象用数据结构进行存储
②将“对硬件的管理”更改为“对链表的增删查改”,这种思想我们称之为“先描述,后组织”
这是任何计算机对象管理思路的创建原则
描述:将数据按照对象的属性进行分别存储
组织:将对象们使用数据结构进行管理
1.3.1补:由“先描述,后组织”的原则推出的问题
①为什么现在所有的主流面向对象语言都要提供面向对象的语法和标准库?
面向对象的语法:如C++中的class和struct,它是为了更好地进行“描述”
标准库:如C++标准库,尤其是其中的STL容器,它是为了更好地进行“组织”
②操作系统和面向对象语言谁先出现?
面向对象的思想是为了辅助“先描述,后组织”的原则而出现,而这个原则属于对操作系统的应用
因此先有操作系统,再有面向对象语言
③为什么会诞生《数据结构》这门课?
是为了更好的进行“组织”
1.3.2OS整体的管理方式
可以类比于银行的管理模式
银行系统有这样的特点:
①银行系统不相信任何人(体现其封闭)
②银行必须提供服务,为此要提供窗口(体现其开放)
需要解决问题:
①在银行存钱要怎么做?
因为银行必须维护自身安全,并给外部提供方便操作的接口,不能随便来人就让进仓库,调设备
②有些老人不会使用窗口,看不懂字怎么办
需要有一个“大堂经理”,来根据老人的需求帮助直接完成存钱等操作
回头看操作系统硬件管理上:
①类比于银行的特点:
操作系统不相信任何用户 --- 封闭
操作系统必须向上提供各种接口,方便上层使用 --- 开放,即system call系统调用接口
②其余对应
底层硬件就像银行中的内部设备,
驱动程序就像各个设备的管理人员,
操作系统就像使用计算机发布任务的工作人员,
系统调用接口就像各个窗口,要使用系统调用接口对于普通程序员来说很难
用户操作接口就像大堂经理,程序员像老人
包括shell外壳,lib(glibc,libc++库),部分指令和图形化界面
此时用户进行简单的指令操作就可以实现自己的需求
1.4OS管理相关的其他问题
1.4.1为什么说“所有软件的底层,都与C直接或间接相关”
系统调用的接口由C语言书写,只能是C语言接口
1.4.2我们所说的安卓系统底层是Linux该怎么理解
①使用的是Linux内核
②安卓属于一个图形化界面,处于用户操作接口层面
二、进程
2.1OS如何对进程进行管理
结合之前OS管理的原则“先描述,后组织”
可以得出:先把每个进程的所有属性添加到一个对象中,然后对这些对象进行组织
2.2什么是进程
2.2.1进程示意
进程=内核数据结构(PCB,在Linux下为task_struct)+程序的代码和数据
当写完一个程序后,程序的代码和数据储存在磁盘中,运行时会把它加载到内存中
然后,会在操作系统内核中对进程进行“先描述,后组织”
描述的结果我们称之为PCB:process control block进程控制块(广义概念)在Linux中对应的就是task_struct
2.2.2进程描述结果task_struct
在Linux描述结果task_struct中,会包含如进程的编号,状态,优先级等信息
struct task_struct
{int pid;int status;int prio;void* memptr;//...struct task_struct* next;
};
其中需要注意的两点:
①memptr指针:使其可以找到内存中加载出来的代码和数据
②包含有如next指针等等组织的结果(next是以链表为例)
此后,OS对进程管理的过程,就是对task_struc的管理过程:
在找到需要的task_struct后,把他交给CPU进行调用,调用过程会使用指针找到对应的代码和数据
2.2.3与实际生活的类比:学生身份
大学学生的身份=在学生信息系统中+生活在学校里
学生信息系统相当于在内核数据结构PCB中
生活在学校里相当于内存中的代码和数据
学校相当于内存
校长相当于CPU
//..........................................................//
门卫和宿管也生活在学校里,但他们不在信息系统中,所以不属于该校学生
校长要找学生,就可以从学生信息系统中找到他
类比于代码和数据虽然在内存中,但不在PCB列表中的代码和数据是不属于进程的,
CPU要调用进程也是直接去task_struct中寻找