操作系统系列(一)——系统的硬件组成以及软件组成
1、系统的硬件组成:
包括 CPU、IO桥、主存储器、磁盘控制器
1.1 CPU:
中央处理单元,解释存储在主存中的指令;包括了PC、寄存器文件、ALU,PC指程序计数器,寄存器文件存储了一些数据,ALU指算术、逻辑单元;
1.2 主存:
主存是一个临时存储设备,DRAM;
1.3 磁盘:
2、系统的软件组成:
整个计算机的软件体系结构体如下图所示:
对上图的解读:
由上图可以看出,系统内核处于hardware和runtime library之间,runtime Library指的是程序运行时的库,这种库能够往上给应用程序提供API
;
因此,操作系统应该做的事情至少包括了对下面的Hardware的管理;
对于一个计算机而言,硬件资源主要就是CPU、存储器(包括内存、磁盘)以及I/O设备
,所以从这三个方面看操作系统是怎么在管理这些东西的;
1、CPU而言——引出进程概念
主要是需要提高CPU的利用率,假设CPU在运行一个程序,但是这个程序是对磁盘的读写,CPU在这个时候完全空闲了下来,这对CPU的利用率而言绝对是种浪费,因此操作系统的人就利用了进程的方式来提高CPU的利用率,每个程序都有自己单独的进程,并且进程有一个优先级的比较,CPU根据进程的优先级来进行调度切换,所以看起来像是在一个时刻运行了多个任务;
2、内存的管理,这是个大话题
程序只有装载在内存中才能去真正的运行,所以就有这么一个问题,计算机有限的物理内存如何给这么多程序去跑呢?
假设这么一个场景,计算机的实际物理内存为200M,程序A需要适应50M,程序B需要使用100M,最简单的分配方式就是直接分配,给A50M,给B100M,这个时候又来了一个程序C,需要200M,那在这种情况下,只能把原来的A和B的数据程序存到磁盘中,再跑C,这样就至少会存在这么几个问题:
(1)效率太低了,涉及不停的内存的切换来切换去;
(2)对整个操作系统而言有风险,假如A程序有个bug,因为直接在跑的是物理地址,这样的话A程序就有可能不小心改动了某个物理地址的值,可能会导致运行在其他物理地址的其他程序出问题,这样很不合理;
因此添加中间层,这一层就是虚拟地址,然后虚拟地址通过某种映射的方式能够转成物理地址,通过虚拟内存能解决上述的第二个问题,但是效率问题还是没有解决,因此提出了分页(page)的概念
提出分页想法的前提是程序的局部性原理,就是说每个程序其实在运行的时候,某个时间段内只是频繁的在用某一小段程序;
因此分页的意思就是将进程的虚拟内存进行分页,然后需要经常使用的就会装载在内存中,而不需要经常使用的,就先放在磁盘里,等需要的时候再去取就可以了
3、I/O设备的管理
其实这个意思就是操作系统会去对驱动进行管理,所以对于写应用层的人来说,不用去关心底下的硬件是如何在跑的
操作系统内核是应用程序和硬件之间的媒介,提供了几个基本的抽象:
1、进程:
操作系统对一个正在运行的程序的一种抽象
2、虚拟内存
操作系统为每一个进程提供了一个假象,像是完全自己在独占一段地址空间
linux管理进程空间布局,以32位的系统为例:
高地址1GB空间分配给内核空间,剩下的空间为userspace
3、文件(后面再补充完善)
UNIX I/O