计算机的硬件的能力是有限的,但是人们想将计算机中硬件的所有潜能发挥;
作为计算机的软件操作系统,它的一个功能是提供抽象的接口,另一个主要功能是管理硬件资源;
1,不要让CPU打盹
(1)多任务系统
操作系统接管了所有的硬件资源,并且本身运行在一个受硬件保护的级别;
所有的应用程序都以进程的方式运行在比操作系统权限更低的级别;
每个进程都有自己独立的地址空间,使进程之间的地址空间相互隔离;
(2)抢占式分配CPU
CPU由操作系统统一进行分配,每个进程根据进程优先级的高低都有机会得到CPU;
但是,如果运行时间超出了一定的时间,操作系统会暂停该进程,将CPU资源分配给其他等待的进程,这种CPU的分配方式称为抢占式;
操作系统可以强制剥夺CPU资源并且分配给它认为目前最需要的进程;
如果操作系统分配给每个进程的时间都很短,即CPU在多个进程间快速地切换,从而造成了很多进程都在同时运行的假象。
2,设备驱动
对于操作系统上面的运行库和应用程序来说,它们希望看到的是一个统一的硬件访问模式;
如:开发应用程序时,读写硬件端口,处理硬件中断等事情,都由操作系统来实现。
(1)定义:是由操作系统中的硬件驱动程序来完成,驱动程序可以看做是操作系统的一部分;
它往往跟操作系统内核一起运行在特权级,但它又与操作系统内核之间有一定的独立性,是的驱动程序有比较好的灵活性。
(2)操作系统不可能为每个硬件设备开发一个驱动程序
因为,PC硬件多如牛毛,这些驱动程序的开发工作通常由硬件生产厂商完成;
只是操作系统开发者为厂商提供了一系列接口和框架,使的按照接口和框架开发的驱动程序可以在操作系统上使用。
(3)以读取文件为例:
操作系统中的文件系统保存了文件的存储结构,负责维护这些数据结构并且保证磁盘中的扇区能够有效的组织和利用;
在操作系统中,要读取文件时,使用一个read的系统调用实现;
文件系统收到read请求后,判断出文件在磁盘中的位置;
然后,文件系统就向硬盘驱动发出读取请求,磁盘驱动程序收到请求以后就向硬盘发出I/O命令;
向硬件发送I/O命令的方式有很多种,其中最为常见的一种就是通过读写I/O端口寄存器来实现;
例如,在x86平台上,有多个硬件端口寄存器,不同的硬件被分配到了不同的I/O端口地址,CPU提供了两条专门的指令in和out来实现对硬件端口的读写。
3,内存不够怎么办?
操作系统的多任务功能使得CPU能够在多个进程之间很好的共享;
操作系统的I/O抽象模型也很好的实现了I/O设备的共享和抽象。
为更有效的利用硬件资源,同时运行多个程序,此时CPU的利用率将会提高,
那么,很明显的一个问题是,如何将计算机上的有限的物理内存分配给多个程序使用?
(1)内存分配策略的问题:
解决以下三个问题的思路:
增加中间层,即使用一种间接的地址访问方法,此时我们就想到将程序给出的地址看作是一种虚拟地址,
然后,通过某些映射,将虚拟地址转换成实际的物理地址。(保证程序的物理地址不重叠)
1)地址空间不隔离
因为,所有的程序都直接访问物理地址,程序所使用的内存空间不是相互隔离的;
此时,出现存储器,管理用户程序运行时的执行环境,用户想象自己有一个独立的地址空间;
地址空间:
a)虚拟地址空间:指虚拟的,人们想象出来的地址空间,其实它并不存在,
每个进程都有自己独立的虚拟空间,而且每个进程只能访问自己的地址空间,
这样就有效地做到了进程的隔离。
b)物理地址空间:是实实在在存在的,存在于计算机中,而且对于每一台计算机来说只是唯一的一个,
你可以把物理地址想象成物理内存;
例如:32位机,有32条地址线,那么物理空间为4GB,
但是若计算机上只装了512MB的内存,那么物理地址的前部分是有效的,后面的部分是无效的。
2)内存使用率低
由于内存空间的有限,使的程序执行时不能将所有的全部装入内存,若那样做了则需要大量的数据换出换入,导致效率低下。
a)分段:能解决问题1和3,问题2不能解决,因为,它还是以整个程序为单位,在内存中进行地址映射。
假设程序所占用的虚拟空间,然后从实际的物理内存中分配一个相同大小的物理地址空间;
通过软件来设置,虚拟空间与物理空间的地址映射;
如:操作系统来设置这个映射函数,实际的地址转换由硬件完成;
(CPU会将虚拟地址转换成实际的物理地址)
b)分页:根据程序的局部性原理,将程序分成固定大小的页(页的大小由硬件决定)。
涉及到的名词:虚拟页,物理页,磁盘页
3)程序运行的地址不确定
程序的重定位问题。(程序装入内存的位置不确定)
计算机的硬件的能力是有限的,但是人们想将计算机中硬件的所有潜能发挥;
作为计算机的软件操作系统,它的一个功能是提供抽象的接口,另一个主要功能是管理硬件资源;
1,不要让CPU打盹
(1)多任务系统
操作系统接管了所有的硬件资源,并且本身运行在一个受硬件保护的级别;
所有的应用程序都以进程的方式运行在比操作系统权限更低的级别;
每个进程都有自己独立的地址空间,使进程之间的地址空间相互隔离;
(2)抢占式分配CPU
CPU由操作系统统一进行分配,每个进程根据进程优先级的高低都有机会得到CPU;
但是,如果运行时间超出了一定的时间,操作系统会暂停该进程,将CPU资源分配给其他等待的进程,这种CPU的分配方式称为抢占式;
操作系统可以强制剥夺CPU资源并且分配给它认为目前最需要的进程;
如果操作系统分配给每个进程的时间都很短,即CPU在多个进程间快速地切换,从而造成了很多进程都在同时运行的假象。
2,设备驱动
对于操作系统上面的运行库和应用程序来说,它们希望看到的是一个统一的硬件访问模式;
如:开发应用程序时,读写硬件端口,处理硬件中断等事情,都由操作系统来实现。
(1)定义:是由操作系统中的硬件驱动程序来完成,驱动程序可以看做是操作系统的一部分;
它往往跟操作系统内核一起运行在特权级,但它又与操作系统内核之间有一定的独立性,是的驱动程序有比较好的灵活性。
(2)操作系统不可能为每个硬件设备开发一个驱动程序
因为,PC硬件多如牛毛,这些驱动程序的开发工作通常由硬件生产厂商完成;
只是操作系统开发者为厂商提供了一系列接口和框架,使的按照接口和框架开发的驱动程序可以在操作系统上使用。
(3)以读取文件为例:
操作系统中的文件系统保存了文件的存储结构,负责维护这些数据结构并且保证磁盘中的扇区能够有效的组织和利用;
在操作系统中,要读取文件时,使用一个read的系统调用实现;
文件系统收到read请求后,判断出文件在磁盘中的位置;
然后,文件系统就向硬盘驱动发出读取请求,磁盘驱动程序收到请求以后就向硬盘发出I/O命令;
向硬件发送I/O命令的方式有很多种,其中最为常见的一种就是通过读写I/O端口寄存器来实现;
例如,在x86平台上,有多个硬件端口寄存器,不同的硬件被分配到了不同的I/O端口地址,CPU提供了两条专门的指令in和out来实现对硬件端口的读写。
3,内存不够怎么办?
操作系统的多任务功能使得CPU能够在多个进程之间很好的共享;
操作系统的I/O抽象模型也很好的实现了I/O设备的共享和抽象。
为更有效的利用硬件资源,同时运行多个程序,此时CPU的利用率将会提高,
那么,很明显的一个问题是,如何将计算机上的有限的物理内存分配给多个程序使用?
(1)内存分配策略的问题:
解决以下三个问题的思路:
增加中间层,即使用一种间接的地址访问方法,此时我们就想到将程序给出的地址看作是一种虚拟地址,
然后,通过某些映射,将虚拟地址转换成实际的物理地址。(保证程序的物理地址不重叠)
1)地址空间不隔离
因为,所有的程序都直接访问物理地址,程序所使用的内存空间不是相互隔离的;
此时,出现存储器,管理用户程序运行时的执行环境,用户想象自己有一个独立的地址空间;
地址空间:
a)虚拟地址空间:指虚拟的,人们想象出来的地址空间,其实它并不存在,
每个进程都有自己独立的虚拟空间,而且每个进程只能访问自己的地址空间,
这样就有效地做到了进程的隔离。
b)物理地址空间:是实实在在存在的,存在于计算机中,而且对于每一台计算机来说只是唯一的一个,
你可以把物理地址想象成物理内存;
例如:32位机,有32条地址线,那么物理空间为4GB,
但是若计算机上只装了512MB的内存,那么物理地址的前部分是有效的,后面的部分是无效的。
2)内存使用率低
由于内存空间的有限,使的程序执行时不能将所有的全部装入内存,若那样做了则需要大量的数据换出换入,导致效率低下。
a)分段:能解决问题1和3,问题2不能解决,因为,它还是以整个程序为单位,在内存中进行地址映射。
假设程序所占用的虚拟空间,然后从实际的物理内存中分配一个相同大小的物理地址空间;
通过软件来设置,虚拟空间与物理空间的地址映射;
如:操作系统来设置这个映射函数,实际的地址转换由硬件完成;
(CPU会将虚拟地址转换成实际的物理地址)
b)分页:根据程序的局部性原理,将程序分成固定大小的页(页的大小由硬件决定)。
涉及到的名词:虚拟页,物理页,磁盘页
3)程序运行的地址不确定
程序的重定位问题。(程序装入内存的位置不确定)