【操作系统】01.概述、组成

【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM

【嵌入式八股】二、计算机基础篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym

【嵌入式八股】三、硬件篇https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM

【嵌入式八股】四、嵌入式Linux篇https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0

alt

操作系统

结合【LINUX应用编程中的Linux系统编程】和【嵌入式Linux内核驱动】学习

框架记忆:概,组通调线同死,基覆连虚

一、操作系统概述

01.大内核微内核区别

大内核

大内核指的是将所有操作系统服务都包含在内核中的设计方式,包括文件系统、网络协议栈、设备驱动程序等。在大内核中,所有服务共享同一个地址空间,因此服务之间的通信速度很快,但是代码很复杂,可靠性较低,一个服务的故障可能会影响整个操作系统的稳定性。

优:高性能

缺:内核代码大,结果混乱,难以维护

微内核

微内核架构则将将内核中最基本的功能(如时钟、中断、原语等)保留在内核,而将那些不需要在核心态执行的功能移到用户态执行,从而降低了内核的设计复杂性。操作系统的核心服务拆分为多个独立的服务,每个服务运行在自己的地址空间中,通过消息传递的方式来进行通信,这些服务包括设备驱动、文件系统、内存管理、进程管理等。由于微内核只包含最基本的服务,因此具有更高的可靠性和可扩展性,同时也更容易实现安全性和灵活性,但是由于服务之间需要频繁通信,因此性能会受到一定的影响。

优:内核功能少,结构清晰,方便管理,更加稳定 缺:需频繁在核心态与用户态之间切换,性能低

结合下面的【内核线程和用户线程】以及【Linux内核驱动部分的上下文】一起看

02.系统调用是什么,你用过哪些系统调用,和库函数有什么区别?

系统调用

系统调用是操作系统提供给应用程序的一组接口,用于访问底层系统资源(如文件、网络、进程等)。应用程序通过系统调用请求操作系统执行某些特定的操作,例如创建进程、读取文件、发送数据等。

常见的系统调用包括:

  1. 文件系统操作:打开文件、读取文件、写入文件、关闭文件等。
  2. 进程控制:创建进程、终止进程、等待进程结束等。
  3. 网络通信:建立连接、发送数据、接收数据等。
  4. 内存管理:分配内存、释放内存等。
  5. 设备控制:读取设备、写入设备等。

不同的操作系统可能会提供不同的系统调用,但通常都会提供以上基本的功能。应用程序通过系统调用与操作系统进行交互,从而实现对底层系统资源的访问。

库函数 库函数(Library function)是把函数放到库里,供别人使用的一种方式。方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。一般放在.lib文件中。库函数调用则是面向应用开发的,库函数可分为两类,一类是C语言标准规定的库函数,一类是编译器特定的库函数。

区别

  1. 库函数在用户地址空间执行,系统调用是在内核地址空间执行,库函数运行时间属于用户时间,系统调用属于系统时间,库函数开销较小,系统调用开销较大
  2. 库函数是有缓冲的,系统调用是无缓冲的
  3. 库函数并不依赖平台,库函数调用与系统无关,不同的系统,调用库函数,库函数会调用不同的底层函数实现,因此可移植性好。系统调用依赖平台
03.系统调用的作用?

为应用程序提供访问硬件资源的统一接口,以至于应用程序不必关心具体的硬件操作细节。

对系统内核进行保护,保证系统的稳定和安全,因为系统调用规定了用户进程进入内核的具体方式以及所能访问的数据范围。

04.简述实时操作系统和非实时操作系统的区别?

实时操作系统(Real-Time Operating System,RTOS)主要用于对响应时间和可靠性要求较高的应用场景,例如机器人控制、飞行控制系统、医疗设备等。实时操作系统是可抢占式内核,能够快速响应外部事件,并在规定的时间内完成对这些事件的处理。实时操作系统通常分为硬实时操作系统和软实时操作系统。硬实时操作系统对响应时间的要求非常严格,必须在规定的时间内完成任务处理;而软实时操作系统对响应时间的要求相对宽松,允许在规定的时间范围内完成任务处理。

非实时操作系统(Non-Real-Time Operating System,NRTOS)是非可抢占式内核,主要用于对响应时间和可靠性要求较低的应用场景,例如普通的桌面应用程序、Web应用程序等。非实时操作系统通常注重资源利用效率和灵活性,允许应用程序在不同的时间段内处理任务,并且不会因为响应时间超时而引起系统错误。

05.常用的实时和非实时操作系统有哪些?

(1)实时:Vxworks、μCOS、eCOS、QNX、MQX、Nucleus、FREERTOS、RTLinux、RTEMS、RT-Thread。

(2)软实时或非实时:WinCE、Linux。

06.用MMU的和不用MMU的操作系统和CPU有哪些?

(1)用MMU的操作系统有:Windows、MacOS、Linux、Android;不用MMU的操作系统有:FreeRTOS、VxWorks、UCOS。

(2)带MMU的CPU有:Cortex-A系列、ARM9、ARM11系列;不带MMU的CPU有:Cortex-M系列(STM32就是使用M系列内核)。

二、进程和线程

进程组成、组织

07.进程的组成

由程序段、数据段、PCB三部分组成

08.进程控制块(PCB)
  1. 进程描述信息: 进程标识符、用户标识符等;
  2. 进程控制和管理信息: 进程状态,进程优先级等;
  3. 进程资源分配清单: 虚拟内存地址空间信息,打开文件列表,IO设备信息等;
  4. CPU相关信息: 当进程切换时,CPU寄存器的值都被保存在相应PCB中,以便CPU重新执行该进程时能从断点处继续执行;
09.进程的组织方式
  1. 无序列表方式:操作系统将所有的进程都存放在一个无序的列表中,每个进程都有一个标识符用于唯一标识。这种方式的优点是简单易实现,但是在查找和管理进程时效率较低。
  2. 链表方式:操作系统将所有的进程存放在一个链表中,每个进程都包含一个指向下一个进程的指针。这种方式的优点是查找和管理进程的效率较高,但是对于频繁的进程插入和删除操作,效率较低。
  3. 数组方式:操作系统将所有的进程存放在一个数组中,每个进程都有一个在数组中的位置索引。这种方式的优点是查找和管理进程的效率较高,但是对于频繁的进程插入和删除操作,效率较低。
  4. 树状结构方式:操作系统将所有的进程组织成一棵树,每个进程都有一个父进程和若干个子进程。这种方式的优点是可以方便地管理和控制进程之间的关系,但是需要更复杂的算法来维护进程树结构。
  5. 索引方式,建立索引表。 alt

创建状态 一个应用程序从系统上启动,首先就是进入创建状态,需要获取系统资源创建进程控制块(PCB)完成资源分配。

就绪状态 在创建状态完成之后,进程已经准备好,但是还未获得处理器资源,无法运行。

运行状态 获取处理器资源,被系统调度,开始进入运行状态。如果进程的时间片用完了就进入就绪状态。

阻塞状态 在运行状态期间,如果进行了阻塞的操作,如耗时的I/O操作,此时进程暂时无法操作就进入到了阻塞状 态,在这些操作完成后就进入就绪状态。

终止状态 进程结束或者被系统终止,进入终止状态

11.空闲的进程和阻塞的进程状态会不会在唤醒的时候误判?

不会。每个进程有个进程控制块PCB,两种状态的进程分别处于两种队列。唤醒应该是找阻塞队列的进程。

在操作系统中,进程状态的转换是由内核管理的,通常情况下,内核会对进程的状态进行严格的控制,不会出现误判的情况。当一个进程被阻塞或空闲时,内核会记录其状态,并将其从可执行队列中移除,直到满足某些条件(如I/O操作完成)才会将其唤醒并放回可执行队列中。

在唤醒进程时,内核会根据进程当前的状态和优先级来决定是否将其放回可执行队列中,或者将其放回阻塞队列或空闲队列中。通常情况下,内核会根据进程当前的状态和优先级进行正确的判断,从而避免误判的情况。

然而,在多线程或多进程的并发环境中,可能会出现竞争条件等问题,从而导致进程状态的混乱或错误。因此,在设计并发程序时,需要考虑并发问题,并使用同步机制(如锁、信号量等)来保护共享资源,避免竞争条件等问题的出现。

12.请问就绪状态的进程在等待什么?

就绪状态的进程并不是在等待某个特定的事件或资源,而是已经完成了所有必要的前置工作,可以立即被调度执行,但是由于系统资源有限,需要等待CPU时间片的分配,因此处于就绪状态。

13.必定引起进程切换的3种状态

运行状态、阻塞状态和就绪状态是引起进程切换的三种状态。一般是选择题。

14.何时使用多进程,何时使用多线程?

多进程:

  1. 需要充分利用多核CPU的情况:多进程可以在不同的CPU核心上并发执行,以充分利用多核CPU的性能。
  2. 需要保证各进程间数据独立性和安全性的情况:多进程可以使用进程间通信来传递数据,同时不同进程之间的内存空间是独立的,可以避免多线程中的竞争条件和死锁等问题。

多线程:

  1. 需要充分利用单个CPU核心的情况:多线程可以在同一个CPU核心上并发执行,以充分利用CPU资源。
  2. 需要共享数据/频繁通信/切换程序/创建跟销毁程序的情况:可以共享同一个进程的内存空间,方便线程之间共享数据和状态信息。

多安,共通切销

#C++##嵌入式##校招##面试##八股#

查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础【本专栏】 3.硬件篇 4.嵌入式Linux (建议PC端查看)

全部评论
点赞 回复 分享
发布于 2023-04-02 09:38 辽宁

相关推荐

可可可可可_:nb啊,看样子是专科玩了几年随便专升本了个民办,又玩了两年。你这能找到我吃
点赞 评论 收藏
分享
评论
5
11
分享
牛客网
牛客企业服务