其实 操做系统并非与计算机硬件一块儿诞生的linux
它是在人们使用计算机的过程当中,为了管理硬件资源,提升性能提升资源利用率,而逐步地造成和完善起来的。程序员
操做系统也是一种程序,负责管理系统资源windows
上电自检(通过BIOS)以后,处理器第一个要处理的程序性能
之因此叫作操做系统,其实就至关于它提供了一个工做台spa
让你能够更加方便的操做计算机的软硬件资源操作系统
是机器的一种封装,对于人机交互提供了统一的操做方式线程
自从第二代晶体管计算机以后,计算机的性能有了很大的提高进程
与之矛盾的天然是计算机手动输入速度慢内存
为了提供系统利用率,出现了批处理系统资源
用户将一批做业提交给操做系统后就再也不干预,由操做系统控制它们自动运行。
显然不具有任何交互性,只是提升了系统的利用率
其中有
联机批处理系统,联机就是主机本身来控制输入输出
输入输出时,计算机的CPU是空闲的,须要等待数据传输完成
脱机批处理系统就是输入输出不在交由主机处理,托管到另外一个台机器
显然,处理机和主机能够并行工做,他们经过高速磁带进行对接
可是仅仅只能执行一个程序
人们固然但愿计算机能够同时执行多个任务
而后很天然的出现了多道程序系统
容许多个程序同时进入内存并运行
交替在CPU中运行,它们共享系统中的各类硬、软件资源。
多道批处理系统
顾名思义就是批处理与多道程序的结合,兼顾了多道与批处理的优势
不过没有交互性
把CPU时间分红时间片,各个任务按照时间片轮流执行,分时就是分配时间片
分时系统的实时性交互性比多道程序有更大的提升
还有一些特定的场景,对于实时性要求更高,好比军事设备等
分为实时控制系统/实时信息处理系统
响应更加及时,更加可靠,平时场景通常是用不到的
能够看得出来,操做系统的发展中有几个主要矛盾
CPU性能与手工操做的矛盾
CPU性能与输入输出的矛盾
运行单一任务与但愿能够执行多程序之间的矛盾
交互性差和但愿能够提供更强交互性之间的矛盾
实时性差与但愿能够提供更加实时可靠系统之间的矛盾
功能单一与但愿能够提供通用功能系统之间的矛盾
整个发展过程就是为了解决这些矛盾
发展的结果也就是CPU的利用率大幅度上升,功能更加完备
能够同时执行多个任务
实时性交互性更高更可靠
也出现了更为通用的计算机
操做系统的类型更多的能够理解为逻辑上的意义,他们能够相互结合,好比上面的多道批处理
还有分时批处理 实时批处理 等
Unix是最先的通用操做系统
此后又出现了linux/windows/苹果
计算机由硬件和软件构成
咱们能够认为操做系统是计算机软件程序和硬件之间的一个薄层
这个薄层封装了底层的硬件实现
基本功能是:
防止硬件被应用程序随意滥用,而且向应用程序提供了简单一致的机制来控制各类不一样的硬件设备
操做系统经过几个基本的抽象概念来达到这个目的
/虚拟内存/进程/文件/
既然是抽象,那天然是像译码器同样,转换了一种描述呈现表达操做方式
文件是对IO设备的抽象
就是字节序列而已,因此每一个IO设备,哪怕是键盘显示器均可以当作是文件
向应用程序提供了一个统一的操做视图
也能够理解为格式,也就是对于全部程序来讲 全部的文件都是这样子的
无论你究竟是什么样子的IO设备,应用程序彻底不用关注他具体的样子
操做系统会提供一致性的解决方案
虚拟内存是对主存和磁盘I/O的设备的抽象
是计算机系统内存管理的一种技术。
它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间)
好像本身都独占使用主存
经过提供连续的内存空间,每一个进程看到的虚拟地址空间由大量的固定的区块构成
其实能够理解为户型图,每一个进程的户型都同样
包括程序代码和数据区/堆/栈 等
他们看到的地址空间是一致的
而不用你本身费心的去管理地址
如今的计算机均可以多任务同时执行,以前提到的中断正是这种功能的硬件基础
没有哪一个程序会一直独占处理器
每一个程序都须要内存,想要多任务运行天然须要更多的内存
怎么才能在有限的内存空间服务于愈来愈多的程序呢?
注意到,虽然内存中有许多个程序同时运行,可是同一时间点,只有一个处理器在执行
若是内存不够的话,可让暂时不用的数据和代码 存放到磁盘
腾出来空间加载将要使用的部分
若是须要的话,再将它们用一样的方式加载回来
这样编写程序的时候,不用关注究竟是否有内存可用,
对于当前程序,他会假定他确定有足够的内存使用
由于这部份内存并不存在,而是位于磁盘上,因此叫作虚拟内存
硬盘的速度是很慢的,若是须要访问的内容不在内存中,而是从磁盘载入,代价是巨大的
因此计算机天然会很慢
也就是说,虚拟内存牺牲执行效率换执行空间(同时运行更多的程序)
对于程序员来讲,操做系统提供的虚拟内存,能够说是给程序的运行提供了统一的内存空间
进程是对处理器 主存 I/O设备的抽象
每一个程序在计算机上运行,看上去能够独占的使用处理器,主存和I/O设备
处理器好像在不间断的一条接一条的执行程序中的指令
对于程序来讲好像只有他本身的程序的代码和数据在内存中
好像跟其余的正在运行的应用程序并无关系
这是操做系统提供的一种假象,这就是进程的概念
进程是对处理器 主存 I/O设备的抽象,也便是一个正在运行的程序的一种抽象
进程也是硬件中断以及系统cpu时间片调度的产物
一个正在运行的程序,这是一件抽象的事情,
想要把它具体的映射到系统中,并且还能有中断,还可以从新返回现场继续执行
你必须用具体的信息去描述记录跟踪它的运行
操做系统保持跟踪进程运行时所须要的全部信息,这种信息也叫做上下文
它包括不少信息,天然取决于操做系统的底层实现
可能包括PC和寄存器的值,主存的内容等
操做系统想要把控制权从当前进程转移到某个新的进程,就会进行上下文切换
也就是保存当前的上下文,恢复进程的上下文
固然现代操做系统一个进程又实际的被分为多个称之为线程的执行单元组成
每一个线程都运行在进程上下文,共享一样的代码和全局数据
操做系统也是计算机发展中的一个伟大创举
他隐藏了大量的底层细节,提供了大量方便的抽象
总结:
操做系统就是对硬件的封装,提供简单统一的访问形式.