第一篇 基础原理篇
第一篇 基础原理篇
1.2 程序是如何运行的:
首先, 进行编程,编程需要编程语言,对绝大部分人来说,使用的编程语言称为高级程序设计语言,如,c,c++,java等。但是计算机不认识高级语言编写的程序,编好的程序需要进行编译变成计算机能够识别的机器语言程序,而这需要编译器和汇编器的帮助,其次,机器语言程序需要加载到内存,形成一个运动中的程序,即进程,这需要操作系统的帮助。进程需要在计算机芯片cpu上执行才算真正在执行,而将进程调度到cpu上运行也由操作系统完成。最后,在cpu上执行得机器语言指令需要变成能够在一个个时钟脉冲里执行的基本操作,这需要指令集机构和计算机硬件的支持,而整个程序的执行过程还需要操作系统提供的服务和程序语言提供的执行环境,这样一个程序到微指令的过程就完成了。
从这个描述中可以看出:程序的运行至少需要如下4个因素:
1)程序设计语言。
2)编译系统。
3)操作系统。
4)指令集结构(计算机硬件系统)
需要注意的是, 左图给出的是程序执行过程是从高级语言编写的程序开始的。而实际并不是总是这。事实上,程序可以直接在机器语言或汇编语言上编写。用这种称为“低级”的语言编写出来的机器语言程序无需经过编译器的翻译就可以在计算机指令集上执行。如果是在汇编语言上编写的汇编程序,则无需经过汇编器的翻译即可加载执行。
1.3 什么是操作系统
操作系统是介于计算机和应用软件之间的一个软件系统
1)操作系统是一个软件系统
2)操作系统使计算机变得好用
3)操作系统使计算机运行变得有序
总结起来是:操作系统使掌管计算机上所有事情的软件系统
操作系统的功能:
1)替用户及其应用管理计算机上的软硬件资源
2)保证计算机资源的公正竞争和使用
3)防止对计算机资源的非法侵占和使用
4)保证操作系统自身正常运转
如下结构
应用程序
------------------------------------------------------------------------------------虚拟机器界面
操作系统
------------------------------------------------------------------------------------物理机器界面
硬件
1.4魔术与管理
操作系统通过进程抽象让每个用户感觉有一台主机独享的cpu,通过虚拟内存抽象,让用户感觉物理内存具有无限扩张性,就是把少变多,当然操作系统的吧少变多不是无中生有,变多也不是无限多,只是针对磁盘容量大小
1.4.2管理者角色
操作系统管理计算机上软硬件资源, 例如,操作系统对CPU,内存,磁盘等管理。使不同用户之间或者同一用户的不同程序之间可以安全有序地共享这些硬件资源,如何利用这些硬件资源, 就是分片, 把硬件分块给应用程序使用。这里关键的原则是有效和公平。
根据管理资源不同,操作系统具体功能如下:
1)cpu管理, 即如何分配cpu给不同应用和用户
2)内存管理, 即如何分配内存给不同应用和用户
3)外存管理, 即如何分配外存(磁盘)给不同应用和用户
4)I/O管理, 即如何分配输入输出设备给应用和用户
除了对上述资源进行管理和抽象外, 操作系统为掌控一切的软件系统,其自身必须是稳定和安全的, 即操作系统自己不能出现问题,因此,操作系统的设计还需包括如下两项:
1)健壮性管理: 即如何确保操作系统自身的正常运行
2)安全性管理: 即如何防止非法操作和入侵
为完成上面所列的功能, 操作系统设计人员构思了许多机制。
1.5用户程序与操作系统
前面说过, 操作系统上下分别是虚拟机界面和物理机界面。处于物理机器下面是硬件,而硬件和操作系统的关系是本书的关注点。
操作系统和应用程序之间的关系:
操作系统为用户程序提供一个虚拟机界面, 而应用程序运行在这个界面之上。操作系统通过虚拟机界面为用户提供各种服务,用户程序在运行过程中不断使用操作系统提供的服务来完成自己的任务。
用户程序是主程序,而操作系统是子系统
比如:用户程序在运行过程中需要读写磁盘, 这个时候需要调用操作系统的服务来完成磁盘的读写操作, 如果需要收发数据包, 也需要调用操作系统的服务来完成。当调用这些服务时,控制从用户程序转移到操作系统,而操作系统在完成这些服务后将控制返回给用户程序。在这种思维模式下用户程序是主程序,而操作系统是子系统
图为: 用户程序为主程序, 操作系统为子程序
操作系统为主程序,用户程序为子程序
系统启动后最先启动的是,操作系统。用户程序不能再操作系统启动之前启动,(除非是很厉害的病毒),因此,每启动一个用户程序,都相当于操作系统将控制转移给用户程序;用户执行完毕后,控制权又返回到操作系统。这样看起来操作系统是主程序, 它一直在调用各种程序,每个程序执行完后,在回到操作系统,循环往复,知道机器关闭,这种思维下,操作系统就是主程序, 用户程序就是子系统,下图为示意图: 操作系统为主程序,用户程序为子程序
图为: 操作系统为主程序,用户程序为子程序
实际上,操作系统和各种用户程序可以看做相互调用,从而形成一个非常复杂的动态关系
1.6操作系统的范畴
操作系统要完成的任务具体有:
1)cpu管理, 即如何分配cpu给不同应用和用户
cpu管理就是要将要介绍的进程管理。进程管理的主要目的有3个:第一个是公平,即每个程序都有机会使用cpu。第二个是非阻塞,即任何程序不能无休止地阻挠其他程序的正常推进。如果一个程序在运行过程中需要输入输出或者因别的什么事情而发生阻塞,这个阻塞不能妨碍别的进程继续前进。第三是优先级,某些程序比另一些程序优先级搞,如果运行优先级高的程序,则优先级低的程序就要让出资源。
2)内存管理, 即如何分配内存给不同应用和用户
内存管理主要管理缓存,主存,磁盘,磁带等存储介质形成的内存架构,为此操作系统设计人员发明了虚拟内存的概念,即物理内存(缓存和主存)扩充到外部存储介质(磁盘,光盘等)上,这样内存的空间就大大地增加了, 能够运行的程序的大小也大大地增加了, 内存管理的另一个目的是让很多程序共享一个物理内存。这就需要对物理内存进行分割和保护,不让一个程序访问另一个程序所占的内存空间,专业术语是运行时不能越界
3)外存管理, 即如何分配外存(磁盘)给不同应用和用户
外存管理通常也称为存储管理, 它就是文件系统,文件系统的主要目的是将磁盘变成一个很容易使用的存储媒介以提供给用户使用,这样我们再访问磁盘时候无需了解磁盘的物理属性或数据在磁盘上精确位置,诸如磁道,慈柱,扇面等。只有使用最为频繁的文件系统都以磁盘为介质
4)I/O管理, 即如何分配输入输出设备给应用和用户 。
I/O管理也称为设备管理,就是管理输入输出设置。I/O管理的目的有两个: 一是屏蔽不同设备的差异性,即用户同样的方式访问不同设备,降低编程难度;二是提高并发访问,即将那些看上去不具备共享特性的设备(打印机),变成可共享。还有一个任务是批处理,它提供一种无需人机交互的程序运行模式。目的达到吞吐量最大化。单位时间完成的任务最多。
posted on 2017-10-30 23:00 augustyang 阅读(306) 评论(0) 编辑 收藏 举报