嵌入式 操作系统(二)

标题:

1.简单说说什么是大端小端,如何判呢?

2.什么是Linux系统态和用户态?什么时候会进入系统态?为什么要区分用户态和系统态?

3.请你说说linux内核的组成?

4.请简单说说linux用户空间与内核通信方式有哪些?

5.IPC(进程间通信)机制中最快的?

6.在linux中系统调用的好处?

7.请说说bootloader、内核和根文件?

8.Bootloader多数有几个阶段的启动过程?

9.为什么需要BootLoader?

内容:

1.简单说说什么是大端小端,如何判呢?

大端模式

在大端模式下,数据的高位字节存放在内存的低地址端,而低位字节存放在高地址端。

给大家举一个例子:整数 0x1234 ,假设该整数存储在内存地址 0x10000x1001 处(2 字节存储),并且使用 大端模式。

  • 0x12(高字节)存储在 0x1000 地址。
  • 0x34(低字节)存储在 0x1001 地址。
地址   0x1000    0x1001

内容   0x12      0x34

  • 大端模式下,0x1234 的高字节 0x12 存储在最低地址 0x1000,而低字节 0x34 存储在高地址 0x1001

小端模式

在小端模式下,数据的低位字节存放在内存的低地址端,而高位字节存放在高地址端。

如何判断大端或小端?

在 Linux 中,可以使用 lscpu 命令来查看系统的字节序。

$ lscpu | grep "Endianness"

输出类似于:

makefile

Endianness:        Little Endian

如果是 大端,则输出:

makefile

Endianness:        Big Endian

当然我们常见的

  • 小端为主机字节序,像X86结构DSP都为小端。
  • ARM:可以是大端或小端。
  • 大端为网络字节序,像keil 则为大端

2.什么是Linux系统态和用户态?什么时候会进入系统态?为什么要区分用户态和系统态?

用户态

用户态是普通应用程序执行的模式。

  • 在用户态下,程序不能直接访问硬件资源(如磁盘、内存、CPU寄存器等),也不能执行特权操作(如直接管理内存、控制外设等)。
  • 程序只能访问它自己的内存空间,不能访问其他进程的内存空间,也不能执行直接影响操作系统和硬件的操作。

系统态

系统态是操作系统内核执行的模式。内核具有完全的控制权限,可以访问硬件资源、管理内存、控制进程调度等。

什么时候进入系统态?

  • 系统调用:当用户程序需要访问操作系统提供的服务时,例如文件操作、内存分配、进程控制等。
  • 硬件中断:如硬件设备发出中断请求
  • 异常:如程序出现错误

为什么要区分用户态和系统态?

  • 通过区分用户态和系统态,操作系统能够确保用户程序不能直接访问硬件或其他程序的内存,从而避免恶意代码直接破坏系统。提供了安全性。
  • 在用户态下运行的程序无法直接干预操作系统内核或其他程序,防止了某个用户程序错误导致整个系统崩溃。只有内核态程序(由操作系统控制)可以执行特权操作,保证了系统的稳定性。
  • 用户态允许每个应用程序运行在独立的地址空间中,程序之间的内存互不干扰。只有通过系统调用与操作系统交互,才能访问外部资源或进行特权操作。

3.请你说说linux内核的组成?

UNIX系统由内核、shell、文件系统(系统调用和共用函数库)和应用程序等4部分组成

Linux内核

内核是操作系统的核心,具有很多最基本功能,如虚拟内存、多任务、共享库、需求加载、可执行程序和TCP/IP网络功能。Linux内核的模块分为以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信、系统的初始化和系统调用等。

shell

shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。用户通过 Shell 向操作系统发送命令,操作系统再通过 Shell 执行这些命令。Shell 主要用于执行命令行输入的任务,如文件管理、程序执行、输入输出控制等。另外,shell编程语言具有普通编程语言的很多特点,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。

Linux文件系统

文件系统是文件存放在磁盘等存储设备上的组织方法。不同于 Windows 系统的驱动器(如 C:、D:),Linux 使用单一的根目录(/)作为文件的顶层目录,从而在一个统一的层级结构中组织所有的文件和设备。Linux系统能支持多种目前流行的文件系统,如EXT2、EXT3、EXT4、FAT、FAT32、VFAT、NTFS和F2FS。

Linux应用程序

标准的Linux系统一般都有一套都有称为应用程序的程序集,它包括文本编辑器、编程语言、XWindow、办公套件、Internet工具和数据库等。

linux内核组成

1.进程管理子系统

进程管理的核心就是进程的调度。在 Linux 内核中,进程调度的单元是进程,进程调度控制系统中的多个进程对 CPU 的访问,从宏观上看,系统中的进程在 CPU 中是并发执行的。此外内核通过系统调用提供了应用程序编程接口,例如:创建新进程(fork,exec),结束进程(kill,exit),并且提供了控制进程,同步进程和进程间通信的接口。

2.内存管理子系统

  • 主要作用是保证系统安全访问内存区域,且绝大部分 CPU 都是支持内存管理单元的
  • 内存管理子系统负责管理每个进程完成从虚拟内存到物理内存的转换,以及系统可用内存空间。

3.文件管理子系统

  • 在 Linux 系统中一切皆文件,它把一切资源都看作是文件,包括硬件设备,通常称为设备文件。

4.网络子系统

在 Linux 内核中,与网络相关的代码被 Linux 独立开,形成一个相对独立的子系统,称为网络子系统,网络子系统是一个层次化的结构,可分为以下几个层次:

  • Socket 层(也可以称之为协议无关层):Linux 在发展过程中,采用 BSD Socket API 作为自己的网络相关的 API 接口。同时,Linux 的目标又要能支持各种不同的协议族,而且这些协议族都可以使用 BSD Socket API 作为应用层的编程接口,这样一来将 Socket 层抽象出来就能屏蔽不同协议族之间的差异,不会对应用层的使用产生影响。
  • 协议层:Linux 网络子系统功能上相当完备,它不仅支持 INET 协议族(也就是通常所说的 TCP/IP 协议族),而且还支持其它很多种协议族,如 INET6、DECnet,ROSE,NETBEUI 等,对于 INET 、INET6 协议族来说,又会进一步将协议族划分为传输层和网络层以及链路层等。
  • 网络设备层:网络设备其实是设备驱动层的内容了,它抽象了网卡数据结构,在一个系统中可能存在多种网

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式/C++八股 文章被收录于专栏

本人双飞本,校招上岸广和通。此专栏覆盖嵌入式常见面试题,有C/C++相关的知识,数据结构和算法也有嵌入式相关的知识,如操作系统、网络协议、硬件知识。本人也是校招过来的,大家底子甚至项目,可能都不错,但是在面试准备中常见八股可能准备不全。此专栏很适合新手学习基础也适合大佬备战复习,比较全面。最终希望各位友友们早日拿到心仪offer。也希望大家点点赞,收藏,送送小花。这是对我的肯定和鼓励。 持续更新

全部评论
爱看 速更
1 回复 分享
发布于 01-16 10:39 重庆
系统态解释详细
1 回复 分享
发布于 01-20 14:41 北京
很不错速更速更
点赞 回复 分享
发布于 01-18 15:44 陕西

相关推荐

评论
13
12
分享

创作者周榜

更多
牛客网
牛客企业服务