操作系统
概述
1.1 操作系统概念
-
何为操作系统
操作系统即运行在硬件上的一套软件,管理开发者的应用程序,管理硬件,通过库和api调用为开发者提供一些抽象功能,本质上是存储在内存的一些代码(调入内存运行时)。我们通过操作系统可以更容易的控制底层硬件,它帮我们抽象掉了与硬件直接打交道的那部分内容。 -
操作系统特征
- 并发
多个执行程序在一段时间内交替执行,如A程序执行9*10-19ms后->停止执行->保存现场->换B程序执行->同理 B执行一段时间再换C或A,因为cpu的高速计算能力,造成多程序同时执行的假象。 - 共享
不外乎数据共享或硬件共享,当一些硬件或数据因为物理属性和软件属性的特征不同,有的可以同时访问,有的只能一个一个访问。故称不可同时访问的为互斥共享方式:如打印机,磁带机;某些栈变量或表;可同时访问的称为同时访问方式:如内存条,寄存器,共享数据等。 - 虚拟
虚拟即抽象过程,即将一些现实中的东西抽象为逻辑东西;比如数据结构中在内存杂列排序的数据可通过链表抽象为线性数据。大方面的虚拟有:虚拟存储器技术;虚拟设备技术;虚拟处理器等。抽象意味着简单化,更易理解,隐藏掉复杂的内部关系,提供简单的外部接口。
- 并发
-
与操作系统交互
-
命令接口
CLI,即通过shell或终端向计算机输入命令,计算机执行之。如windows中的cmd
linux下的terminal ;windows下的shell没有linux下的强大 ~ - ~,shell里也有自己的脚本语言,像windows的.bat ,挺好玩的可以玩一下。 -
程序接口
系统封装了基本上所有的必须功能,以二进制库或者执行文件(本质山都是机器码)保存在存储设备,运行时写入内存。引用30天自制操作系统作者的一句话,所有编程语言都是工具,本质都是生成二进制机器码,只是一层抽象上又添加多层抽象隐匿了内部细节。以C语言为例 ,倘若脱离操作系统支持 ,printf()函数也就不会再被支持了,像prinf这种函数就是系统api,大部分编程语言都会提供。简单聊一下C语言的执行 c源代码 #include<stdio.h> printf();预编译会用声明文件(.h)替换掉#include<stdio.h>然后再编译源文件,(静态库编译)编译的过程就是将这些二进制库的二进制代码和你写的源代码编译成的二进制代码粘合起来(添加一些中间二进制代码用于数据交换) ,最后连接操作系统的引导的二进制代码就成了一个执行文件(.exe)。文件名其实可以随便起。本质上是一个表记录着文件名和代码地址的关系。先简单聊一下得了 ,有时间在写详细的。
-
-
内核和应用层交互