开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 27 天,点击查看活动详情。
一、程序分类
程序按其运行环境分为:
-
裸机程序: 直接运行在对应硬件上的程序;(这里还有一个概念,驱动:裸机程序的一部分)
-
应用程序: 只能运行在对应操作系统上的程序;例如:微信,只能运行在IOS、Andorid和Windows上。
二、计算机系统的层次结构
计算机系统有两种层次结构。
无操作系统的简单的两层结构
示意图如下所示:
graph TD
裸机程序 --> 硬件
我们学习过程中接触到的单片机就是这种结构,它具有操作容易、结构简单等特点。
除此以外,生活中常用的家用电器,如:电视机机顶盒、路由器,这些都是简单的两层结构,体积都是偏小型的。
有操作系统的复杂的四层结构
其结构示意图如下所示:
主要包括以下几个方面:
-
上层结构,也就是熟知的应用层,对应于我们每天都能接触到的各种APP;
-
中间层结构,是各种各样的功能库,例如:C语言中的函数库、线程库等;
-
底层结构,也就是熟知的系统层,操作系统的内核;
最常用到的安卓手机操作系统,就是由linux内核与安卓接口库组合而来的;IOS和homony也是一样的道理。
-
最后一个是硬件结构,也是我们能直接感受到的实物。
三、操作系统
什么是操作系统呢?
-
狭义的操作系统:给应用程序提供运行环境的裸机程序,也被称为操作系统内核;这个定义一般是被底层开发人员所接受的;
-
广义的操作系统:一组软件集合,它包含:
-
最核心的一个裸机程序 ----------内核 (kernel)
-
app开发常用的一些功能库(如:C语言标准函数库、线程库、C++标准类库、QT类库等等)
-
一些管理用的特殊app(如桌面、命令行、app包管理器、资源管理器、系统设置、一些常用后台服务程序)
这个定义通常是媒体公司所认为的。
-
四、操作系统内核的实现模式
内核:操作系统最核心的那个裸机程序,主要负责硬件资源的驱动和管理。
-
一个操作系统内核主要包括如下几个子模块:
-
任务管理:多任务支持、任务调度、任务间通讯
-
内存管理:物理内存管理,虚拟内存实现
-
设备驱动:各种外部设备的I/O支持
-
网络协议支持 (不上网的话也是非必要的)
-
文件系统支持 (选支持几种文件系统)
-
启动管理 (一段汇编代码)
-
-
两种经典的内核实现模式
-
单内核(宏内核):所有子模块代码编译到一个比较大的可执行文件(镜像文件)中,各子模块代码共用同一套运行资源,各模块间的交互直接通过函数调用来进行
-
微内核:只将任务管理、内存管理、启动管理最基本的三个子模块编译到一个微型的可执行文件中,其它子模块则各自编译成独立的后台服务程序,这些服务程序与微型内核以及app间主要通过各种IPC进行通讯(这里可以认为是服务进程,只有进程间能够通信才能使用这些服务进程IPC)
-
各自的特点
-
单内核特点:效率高,稳定性低,扩展性差,安全性高,典型操作系统:UNIX系列、Linux
-
微内核特点:效率低,稳定性高,扩展性高,安全性低,典型操作系统:Windows,QNX