汽车电子嵌入式开发系列50篇(四)-一文读懂OS操作系统

网友投稿 651 2022-05-29

操作系统

操作系统(Operation System, OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。

操作系统是计算机系统资源的管理者,分为:

处理机管理(CPU)

存储器管理(内存)

文件管理(外存)

设备管理(I/O)

操作系统是用户与计算机硬件系统之间的接口,同时也是计算机硬件和其他软件的接口,分为:

命令接口

程序接口

功能:

管理计算机系统的硬件、软件及数据资源;

控制程序运行;

改善人机界面;

为其他应用软件提供支持,让计算机系统所有资源最大限度地发挥作用;

提供各种形式的用户界面,使用户有一个好的工作环境;

为其他软件的开发提供必要的服务和相应的接口等。

特征:

并发:两个或者多个事件在同一时间间隔内发生;

共享:系统中的资源可供内存中多个并发执行的进程共同使用;

虚拟:把一个物理上的实体变为若干个逻辑上的对应物;

异步:在多道程序环境下,允许多个程序并发执行,但因资源有限,进程的执行不是一贯到底,而是走走停停,以不可预知的速度向前推送,这就是进程的异步性。

基本概念

互斥:进程之间访问临界资源时相互排斥的现象;

临界资源:一次仅允许一个进程使用的资源,如 打印机。

临界区:每个进程中访问临界资源的那段代码。

并发:同一时间段有几个程序都处于已经启动到运行完毕之间,并且这几个程序都在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。并发的两种关系是同步和互斥;

并行:单处理器中进程被交替执行,表现出一种并发的外部特征;在多处理器中,进程可以交替执行,还能重叠执行,实现并行处理,并行就是同时发生的多个并发事件,具有并发的含义,但并发不一定是并行,也就是说事件之间不一定要同一时刻发生;

同步:进程之间存在依赖关系,一个进程结束的输出作为另一个进程的输入。具有同步关系的一组并发进程之间发送的信息称为消息或者事件;

异步:和同步相对,同步是顺序执行,而异步是彼此独立,在等待某个事件的过程中继续做自己的事,不要等待这一事件完成后再工作。

线程是实现异步的一个方式,异步是让调用方法的主线程不需要同步等待另一个线程的完成,从而让主线程干其他事情。

多线程:多线程是进程中并发运行的一段代码,能够实现线程之间的切换执行;

异步和多线程:不是同等关系,异步是目的,多线程只是实现异步的一个手段,实现异步可以采用多线程技术或者交给其他进程来处理。

发展历程

汽车电子嵌入式开发系列50篇(四)-一文读懂OS操作系统

手工阶段

单道批处理系统

多道批处理系统

分时操作系统

实时操作系统

网络操作系统和分布式操作系统

网络操作系统和分布式操作系统的不同之处在于:

在分布式操作系统中,若干台计算机相互协同完成同一任务;

而在网络操作系统中,每台计算机都是相互独立的,它们并不能相互协同完成同一任务。

CPU的工作状态

大多数计算机系统将CPU执行状态分为目态与管态。

管态就是 supervisor(管理者) mode 翻译来的。

那么目态呢,其实是 object(目标) mode 翻译来的。

管态:supervisor(管理者) mode 又叫特权态、系统态或者核心态。CPU在管态下可以执行指令系统的全集。

如果程序处于管态,则该程序就可以访问计算机的任何资源,即 它的资源访问权限不受限制。

通常,操作系统在管态下运行。

目态:object(目标) mode又叫常态或用户态。机器处于目态时,程序只能执行非特权指令,不能直接使用系统资源,也不能改变CPU的工作状态,并且只能访问这个用户程序自己的存储空间。

科普:为什么叫 object mode 呢?

通常CPU执行两种不同性质的程序:一种是操作系统内核程序;另一种是用户自编程序或系统外层的应用程序。

对操作系统而言,这两种程序的作用不同,前者是后者的管理者,因此“管理程序”要执行一些特权指令,而“被管理程序”出于安全考虑不能执行这些指令。

因为管理者需要管理它,它就是管理者的管理目标。所以就叫 object mode。

目态(用户态)→管态(核心态)

系统调用:这是用户态进程主动要求切换到核心态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。

系统调用机制的核心是使用了操作系统为用户开放的一个中断来实现。

异常:当 CPU 在执行用户态程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了核心态,如 缺页异常。

I/O设备的中断:当 I/O 设备完成用户请求操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令,转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到核心态的切换。

例如,硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中,执行后续的操作。

其中,系统调用可以认为是用户进程主动发起的,异常和外部设备中断则是被动的。

管理功能

处理机管理:

进程互斥方式:进程(线程)在对临界资源进行访问时,应采用互斥方式。

进程同步方式:在相互合作去完成共同任务的诸进程(线程)间,由同步机构对它们的执行次序加以协调。

进程控制:在传统多道程序环境中,要是作业运行,必须先为它创建一个或多个进程,并为之分配必要的资源。当进程运行结束后,立即撤销该进程,以便能及时回收该进程所占用的各类资源。

进程同步:为多个进程(含线程)的运行进行协调。

进程通信:在多道程序环境下,为了加速应用进程的运行,应在系统中建立多个进程,并且再为一个进程建立若干个线程,由这些进程(线程)相互合作去完成一个共同的任务,而在这些进程(线程)之间又往往需要交换信息。

调度:在后备队列上等待的每个作业或者进程,通常都需要调度才能执行,调度的任务,即 将处理机分配给它。

存储器管理:

内存分配:采用静态和动态两种方式实现内存分配数据结构,以记录内存使用情况,按照一定算法分配,对不再需要的内存进行回收。

内存保护:确保每道用户程序都只在自己的内存空间运行,彼此互不干扰。

地址映射:编译后的程序的地址分为逻辑地址和物理地址,多道程序环境中,每道程序不可能都从 “0” 地址开始,要保证程序运行,则须将逻辑地址转换成内存空间中的物理地址。

动态重定位:在程序执行过程中,每当访问指令或数据时,将要访问的程序或数据的逻辑地址转换成物理地址。

实现方法:在系统中增加一个重定位寄存器,用来装入程序在内存中的起始地址。程序执行时,真正访问的内存地址是相对地址与重定向寄存器中的地址相加之和,从而实现动态重定位。

内存扩充:从逻辑上去扩充内存容量,使用户所感受到的内存容量比实际容量大得多,或者让更多的程序能并发执行。

设备管理:

缓冲管理:缓冲区机制能够有效缓解 CPU 运行的高速性和 I/O 低速性的矛盾。

设备分配:设置设备控制表、控制器控制表等数据结构,能够了解指定设备当前是否可用,是否忙碌,以及该设备被分配出去,系统是否还安全。

设备处理程序:实现 CPU 和设备管理器之间的通信,由 CPU 向设备控制器发出 I/O 命令,要求它完成指定的 I/O 操作,反之由 CPU 接收从控制器发来的中断请求,并给予迅速的响应和相应的处理。

文件管理:

文件存储空间的管理:由文件系统对诸多文件及文件的存储空间实施统一的管理,对每个文件分配必要的外存空间,提高外存的利用率和文件系统的执行速度。

目录管理:相当于文件的索引,建立目录项(文件名、文件属性、文件在磁盘中的物理位置等),方便用户查询检索。

文件的读/写管理和保护:防止未经批准的用户存取文件、防止冒名顶替存取文件、防止以不正确的方式使用文件。

交通智能体 任务调度 嵌入式

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:用 Python 脚本实现对 Linux 服务器的监控
下一篇:ZooKeeper源码阅读心得分享+源码基本结构+源码环境搭建
相关文章