计算机程序与操作系统

183 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 27 天,点击查看活动详情

一、程序分类

程序按其运行环境分为:

  1. 裸机程序: 直接运行在对应硬件上的程序;(这里还有一个概念,驱动:裸机程序的一部分)

  2. 应用程序: 只能运行在对应操作系统上的程序;例如:微信,只能运行在IOS、Andorid和Windows上。

二、计算机系统的层次结构

计算机系统有两种层次结构。

无操作系统的简单的两层结构

示意图如下所示:

graph TD
裸机程序 --> 硬件

我们学习过程中接触到的单片机就是这种结构,它具有操作容易、结构简单等特点。

除此以外,生活中常用的家用电器,如:电视机机顶盒、路由器,这些都是简单的两层结构,体积都是偏小型的。

有操作系统的复杂的四层结构

其结构示意图如下所示:

image.png

主要包括以下几个方面:

  1. 上层结构,也就是熟知的应用层,对应于我们每天都能接触到的各种APP;

  2. 中间层结构,是各种各样的功能库,例如:C语言中的函数库、线程库等;

  3. 底层结构,也就是熟知的系统层,操作系统的内核;

    最常用到的安卓手机操作系统,就是由linux内核与安卓接口库组合而来的;IOS和homony也是一样的道理。

  4. 最后一个是硬件结构,也是我们能直接感受到的实物。

三、操作系统

什么是操作系统呢?

  • 狭义的操作系统:给应用程序提供运行环境的裸机程序,也被称为操作系统内核;这个定义一般是被底层开发人员所接受的;

  • 广义的操作系统:一组软件集合,它包含:

    1. 最核心的一个裸机程序 ----------内核 (kernel)

    2. app开发常用的一些功能库(如:C语言标准函数库、线程库、C++标准类库、QT类库等等)

    3. 一些管理用的特殊app(如桌面、命令行、app包管理器、资源管理器、系统设置、一些常用后台服务程序)

      这个定义通常是媒体公司所认为的。

四、操作系统内核的实现模式

内核:操作系统最核心的那个裸机程序,主要负责硬件资源的驱动和管理。

  • 一个操作系统内核主要包括如下几个子模块:

    1. 任务管理:多任务支持、任务调度、任务间通讯

    2. 内存管理:物理内存管理,虚拟内存实现

    3. 设备驱动:各种外部设备的I/O支持

    4. 网络协议支持 (不上网的话也是非必要的)

    5. 文件系统支持 (选支持几种文件系统)

    6. 启动管理 (一段汇编代码)

  • 两种经典的内核实现模式

    1. 单内核(宏内核):所有子模块代码编译到一个比较大的可执行文件(镜像文件)中,各子模块代码共用同一套运行资源,各模块间的交互直接通过函数调用来进行

    2. 微内核:只将任务管理、内存管理、启动管理最基本的三个子模块编译到一个微型的可执行文件中,其它子模块则各自编译成独立的后台服务程序,这些服务程序与微型内核以及app间主要通过各种IPC进行通讯(这里可以认为是服务进程,只有进程间能够通信才能使用这些服务进程IPC)

各自的特点

  • 单内核特点:效率高,稳定性低,扩展性差,安全性高,典型操作系统:UNIX系列、Linux

  • 微内核特点:效率低,稳定性高,扩展性高,安全性低,典型操作系统:Windows,QNX