计算机操作系统概述
1.什么是操作系统?
- 操作系统是管理计算机硬件与软件资源的程序,是计算机的基石。
- 操作系统本质上是一个运行在计算机上的软件程序,用于管理计算机硬件和软件资源。例如:运行在电脑上的应用程序都通过操作系统来调用系统内存和磁盘等硬件资源。
- 操作系统的存在屏蔽了硬件层的复杂性。调用硬件资源的时候只需要通过操作系统就可以操作。
- 操作系统的内核时操作系统的核心部分,它负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。内核是连接应用程序和硬件的桥梁,决定着系统的稳定性。
2.内核态与用户态
2.1什么是内核态与用户态
根据进程访问资源的特点,我们可以把进程在系统上的运行分为两个级别:
用户态:只能访问受限资源,不能直接访问内存等硬件设备,必须通过系统调用陷入到内核中,才能访问这些特权资源。
内核态:有更高的权限,在内核态级别下运行的进程或程序几乎可以访问计算机的任何资源,不受限制。
2.2系统调用
我们运行的程序基本都是运行在用户态,当需要调用操作系统提供的内核态子功能时,就需要使用系统调用。
系统调用是操作系统的最小功能单位。
也就是说在我们运行的用户程序中,凡是与内核态级别的资源有关的操作(如文件管理、进程控制、内存管理等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。
这些系统调用按功能大致可分为如下几类:
- 设备管理。完成设备的请求或释放,以及设备启动等功能。
- 文件管理。完成文件的读、写、创建及删除等功能。
- 进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。
- 进程通信。完成进程之间的消息传递或信号传递等功能。
- 内存管理。完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。
- 设备驱动管理、网络管理等等。
- 计时器:计算机能计时是因为晶体振荡器产生的电磁脉冲。那么所有的定时任务都是以它为基础的。
2.3库函数
库函数就是通过对系统调用进行封装,提供简单的基本接口给用户,屏蔽复杂的底层实现细节,减轻程序员的负担,从而更加关注上层的逻辑实现。这样增强了程序的灵活性,当然对于简单的接口,也可以直接使用系统调用访问资源,例如:**open(),write(),read()**等等。
库函数根据不同的标准也有不同的版本,例如:glibc库,posix库等。
2.4shell
shell顾名思义,就是外壳的意思。就好像把内核包裹起来的外壳。它是一种特殊的应用程序,俗称命令行。为了方便用户和系统交互,一般一个shell对应一个终端,呈现给用户交互窗口。当然shell也是编程的,它有标准的shell语法,符合其语法的文本叫shell脚本。很多人都会用shell脚本实现一些常用的功能,可以提高工作效率。
2.5为什么要有用户态和内核态
由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级。往往我们的系统的资源是固定的,例如内存2G,CPU固定,磁盘2TB,网络接口固定。所以就需要操作系统对资源进行有效的利用。假设某个应用程序过分的访问这些资源,就会导致整个系统的资源被占用,如果不对这种行为进行限制和区分,就会导致资源访问的冲突。
在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机n回就不足为奇了。所以,CPU将指令分为特权指令