当前位置: 首页 > news >正文

嵌入式面试笔试刷题(day14)

文章目录

  • 前言
  • 一、进程控制块
    • 1.PCB控制块的作用
    • 2.PCB的存储位置
  • 二、进程的三级映射
  • 三、return , exit, pthread_exit
  • 四、pthread_join作用
  • 五、互斥锁和信号量的区别
  • 六、怎么判断链表是否有环
  • 总结


前言

本篇文章继续我们的刷题之路。

一、进程控制块

这里只讲解进程的PCB控制块,线程的TCP控制块作用和进程PCB控制块作用类似。

1.PCB控制块的作用

进程控制块(Process Control Block,PCB)是操作系统中用于管理和跟踪进程信息的数据结构。每个进程在操作系统中都有一个对应的 PCB,它存储了与进程执行和管理相关的各种信息。PCB 在进程的创建、切换和终止等操作中起着重要的作用。

PCB 通常包含以下信息:

1.进程标识符(Process ID,PID):用于唯一标识一个进程。

2.进程状态(Process Status):表示进程当前的执行状态,例如运行、就绪、阻塞等。

3.寄存器内容(Register Context):保存进程的寄存器状态,包括程序计数器(PC)、堆栈指针(SP)等。当进程切换时,这些寄存器的状态会被保存到 PCB 中,以便在切换回来时进行恢复。

4.进程优先级(Process Priority):用于调度和确定进程的执行顺序。

5.程序计数器(Program Counter,PC):记录下一条要执行的指令的地址。

6.内存管理信息:包括进程的地址空间、页表、分配的物理内存等。

7.文件描述符表(File Descriptor Table):记录进程打开的文件和网络连接的信息。

8.资源使用信息(Resource Usage):统计进程使用的 CPU 时间、内存、文件描述符等资源的使用情况。

9.父子关系和进程关系(Process Relationships):记录进程的父进程、子进程、兄弟进程等关系。

10.同步和通信信息(Synchronization and Communication):用于进程之间的同步和通信,如信号量、互斥锁、管道等。

PCB 是操作系统在进程创建时分配的数据结构,用于存储和管理进程的各种状态和信息。当操作系统进行进程切换时,它会保存当前进程的状态到其对应的 PCB 中,然后加载下一个进程的 PCB,从而实现进程之间的切换和调度。

PCB 在保证进程状态的正确性和执行的顺序上起着关键的作用,操作系统通过维护和管理 PCB 来实现进程的调度、资源分配和进程通信等功能,从而提供了一个稳定和可靠的多任务环境。

2.PCB的存储位置

PCB 被存储在内核的内存空间中,而不是进程的用户空间。这是为了确保 PCB 的安全性和可靠性,避免进程对其进行非法访问或篡改。

二、进程的三级映射

在操作系统中,进程的三级映射(Three-level Page Table Mapping)是一种虚拟内存管理技术,通过使用多级页表来实现大规模的内存映射。它是现代操作系统中常见的内存管理方案之一。

传统的两级页表结构由一个单一的页表来管理虚拟地址到物理地址的映射关系。然而,当系统的物理内存非常大时,这种单级页表会占据较大的内存空间,并且遍历页表以查找映射关系的时间也较长。为了解决这些问题,引入了三级页表。

三级页表的结构由三个层次的页表构成,每个层次都有一个页表。其中,每个页表通过索引来决定下一个页表的地址,从而实现逐级查找的快速内存映射。

具体来说,三级页表的结构如下:

1.顶级页表(PML4,Page Map Level 4):顶级页表是三级页表的最高级别,在这一级别上进行虚拟地址到物理地址的映射。顶级页表结构包含了多个页表项,每个页表项指向下一级的页目录表。

2.页目录表(PDPT,Page Directory Pointer Table):页目录表是三级页表的中间级别,包含了多个页目录项。每个页目录项指向下一级的页表。

3.页表(PD,Page Directory):页表是三级页表的最低级别,包含了多个页表项。每个页表项最终映射到物理页面。

通过三级页表,系统可以将大型的虚拟地址空间分割成更小的块进行管理。只有在需要的情况下,才会加载或创建实际的页表项和物理页面,从而实现了懒加载和按需分配的内存管理机制。这样可以节省内存空间,并提高内存访问的效率。

总结起来,进程的三级映射是一种虚拟内存管理技术,通过三层级联的页表结构实现了大规模的内存映射。它提供了更灵活的内存管理和更高效的映射查找,适用于大型内存系统和需要管理大量虚拟地址空间的场景。

在这里插入图片描述

三、return , exit, pthread_exit

1.return : 返回调用者

2.exit : 退出进程

3.pthread_exit : 退出线程

四、pthread_join作用

使用pthread_join()函数等待子线程的结束,并且释放包括堆栈空间和其他系统资源。

五、互斥锁和信号量的区别

旋锁(Spin Lock)和信号量(Semaphore)是同步机制中常用的两种方式,它们有以下区别:

1.工作方式:自旋锁是一种忙等待的方式。当一个线程尝试获取自旋锁时,如果锁已被其他线程占用,该线程会一直循环检查锁的状态,直到锁可用。这种方式适用于锁的占用时间很短暂的情况。信号量是一种阻塞机制。当一个线程尝试获取信号量时,如果信号量计数为0,则线程会被阻塞,在计数不为0时才能继续执行。

2.CPU占用:自旋锁在获取锁失败时会进行忙等待,持有锁的线程可能长时间不释放锁,导致等待线程一直在循环检查,占用CPU资源。而信号量使用阻塞机制,等待线程会被挂起,不占用CPU资源,直到信号量可用才会被唤醒。

3.同步范围:自旋锁主要用于对临界区的保护,即一小段代码或一段操作。线程在进入临界区前先获取自旋锁,退出临界区后释放自旋锁。信号量可以用于限制资源的访问数目,可以对多个临界区进行保护,线程在资源可用时获取信号量,使用资源后释放信号量。

4.适用场景:自旋锁适用于锁的占用时间短暂、锁冲突的概率低、并发程度高的情况。当临界区的执行时间相对较短,忙等待的开销可以接受时,自旋锁是一个有效的选择。信号量适用于锁的占用时间较长、锁冲突概率高、并发程度低的情况。当临界区的执行时间较长或者需要限制资源的并发访问时,阻塞等待的方式可以有效避免忙等待造成的资源浪费。

六、怎么判断链表是否有环

1.创建两个指针,一个指针称为快指针(fast),另一个指针称为慢指针(slow),初始时都指向链表的头节点。

2.快指针每次向前移动两个节点,慢指针每次向前移动一个节点。

3.如果链表中存在环,那么快指针和慢指针最终会相遇。

4.如果链表中不存在环,那么快指针最终会先到达链表尾部,此时可以判断链表无环。

#include <stdbool.h>// 定义链表节点
struct ListNode {int val;struct ListNode* next;
};bool hasCycle(struct ListNode* head) {if (head == NULL || head->next == NULL) {return false;  // 链表为空或只有一个节点,不可能有环}struct ListNode* slow = head;  // 慢指针struct ListNode* fast = head->next;  // 快指针while (fast != slow) {if (fast == NULL || fast->next == NULL) {return false;  // 快指针已经到达链表尾部,没有环}// 快指针每次移动两步,慢指针每次移动一步fast = fast->next->next;slow = slow->next;}return true;  // 快指针追上慢指针,存在环
}

总结

本篇文章就介绍到这里。

相关文章:

嵌入式面试笔试刷题(day14)

文章目录 前言一、进程控制块1.PCB控制块的作用2.PCB的存储位置 二、进程的三级映射三、return , exit, pthread_exit四、pthread_join作用五、互斥锁和信号量的区别六、怎么判断链表是否有环总结 前言 本篇文章继续我们的刷题之路。 一、进程控制块 这里只讲解进程的PCB控制…...

好用免费的Chat GPT(亲测有用)

1、MindLink麦灵 MindLink麦灵 点进登录后 普通用户可以提问100次 2、你问我答 你问我答 无限次数的。 3、灵感 灵感 点击链接后会提示你如何下载使用。 这个有win版和mac版&#xff0c;点击登陆后&#xff0c;每日都会有30次GPT3/3.5的提问。 4、WebTab 在浏览器插件中…...

SpringBoot项目--电脑商城【上传头像】

一、易错点 1.错误写法&#xff1a; 把文件存到数据库中,需要图片时访问数据库,数据库将文件解析为字节流返回,最后写到本地的某一个文件.这种方法太耗费资源和时间了 2.正确写法&#xff1a; 将对应的文件保存在操作系统上,然后再把这个文件路径记录下来,因为在记录路径的…...

优化SOCKS5的方法

在今天的互联网世界中&#xff0c;保护个人隐私和提升网络速度至关重要。作为一种常用的代理协议&#xff0c;SOCKS5代理服务器不仅可以保护您的隐私&#xff0c;还可以实现更快速的网络访问。本文将为您介绍一些优化SOCKS5代理服务器的方法&#xff0c;以提高网络速度和安全性…...

使用 HelpLook Chatbot,让AI聊天机器人变成销售经理

想要增强AI聊天机器人销售技巧的话&#xff0c;我们需要一个强大的搭建工具来帮助我们增加客户互动&#xff0c;通过很多的客户互动数据来支撑和锻炼我们的AI聊天机器人。在本篇文章中&#xff0c;looklook将会系统地来说说该如何定制聊天机器人的行为。 使用AI聊天机器人的好处…...

MT9700 80mΩ,可调快速响应限流配电开关芯片

MT9700 80mΩ&#xff0c;可调快速响应限流配电开关芯片 特征 符合USB规范 集成80mΩ电源MOSFET 低电源电流 15μA典型开启状态 1μA典型关闭状态 宽输入电压Range&#xff1a;2.4V到5.5V 快速瞬态响应&#xff1a;<2μs 反向电流流阻塞 热关机保护 热插件应…...

RabbitMQ之延迟队列

RabbitMQ之延迟队列 1. 延迟队列概念2. 延迟队列使用场景3. RabbitMQ 中的 TTL3.1 消息设置 TTL3.2 队列设置 TTL3.3 两者的区别 4. 整合 SpringBoot4.1 创建项目4.2 添加依赖4.3 修改配置文件4.4 添加 Swagger 配置类 5. 队列 TTL5.1 代码架构图5.2 配置文件类代码5.3 消息生产…...

k8s部署手册-v06

一、基础配置 1.修改主机名 hostnamectl set-hostname k8s-master01 hostnamectl set-hostname k8s-master02 hostnamectl set-hostname k8s-master03 hostnamectl set-hostname k8s-node01 hostnamectl set-hostname k8s-node022.添加 主机名与IP地址解析 cat > /etc/ho…...

Qt 5.15集成Crypto++ 8.7.0(MSVC 2019)笔记

一、背景 笔者已介绍过在Qt 5.15.x中使用MinGW&#xff08;8.10版本&#xff09;编译并集成Crypto 8.7.0。 但是该编译出来的库&#xff08;.a和.dll&#xff09;不适用MSVC&#xff08;2019版本&#xff09;构建环境&#xff0c;需要重新编译&#xff08;.lib或和.dll&#xf…...

LeetCode——贪心篇(一)

刷题顺序及思路来源于代码随想录&#xff0c;网站地址&#xff1a;https://programmercarl.com 目录 455. 分发饼干 376. 摆动序列 53. 最大子数组和 122. 买卖股票的最佳时机 II 55. 跳跃游戏 45. 跳跃游戏 II 1005. K 次取反后最大化的数组和 455. 分发饼干 假设你是…...

2023高教社杯 国赛数学建模C题思路 - 蔬菜类商品的自动定价与补货决策

1 赛题 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c; 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…...

【理解线性代数】(四)线性运算的推广与矩阵基础

1. 数值加法和乘法 数值加法与乘法&#xff0c;是小学数学课程中的基本数学运算。例如&#xff1a; 加法&#xff1a;112 乘法&#xff1a;2*24 在这个知识层次下&#xff0c;运算的基本单位是数字。 2. 从数值到向量 数值加法&#xff0c;可以看作一维空间中的向量加法&…...

C# 什么是继承和派生

C# 什么是继承和派生 在 C# 中&#xff0c;继承&#xff08;Inheritance&#xff09;是一种机制&#xff0c;它允许一个类&#xff08;子类&#xff09;从另一个类&#xff08;父类&#xff09;中继承属性和方法。这种关系使得子类可以重用父类的代码&#xff0c;同时可以在子…...

无涯教程-JavaScript - HEX2BIN函数

描述 HEX2BIN函数将十六进制数转换为二进制数。 语法 HEX2BIN (number, [places])争论 Argument描述Required/Optionalnumber 您要转换的十六进制数。 数字不能超过10个字符(40位)。数字的最高有效位是符号位(从右数第40位)。其余的39位是幅度位。 负数使用二进制补码表示。…...

前端面试0906

// 请给出输出结果 function foo(){ console.log(a); } function bar(){ var a 3; console.log(this.a); foo(); } var a 2; bar(); 2 2 // 请从下面的问题中挑选3道进行回答 1. 防抖和节流分别是什么&#xff0c;一般用在什么场景&#xff1f; 防抖&#xff08;Debounc…...

OceanBase社区版4.x核心技术解密

数字化时代&#xff0c;各行各业的数据量呈现爆发式增长&#xff0c;对于海量数据价值的挖掘和应用&#xff0c;正成为推动创新的主要力量&#xff0c;与此同时&#xff0c;数据计算复杂度正在提升。在此背景下&#xff0c;对于数据处理的基石数据库而言&#xff0c;正面临市场…...

快速安装k8s

RKE安装方式 官方文章资源地址 https://rke.docs.rancher.com/installation rke工具下载地址&#xff08;arm,amd,windows都有&#xff09; https://github.com/rancher/rke/releases x86的用amd64下载rke工具 https://github.com/rancher/rke/releases/download/v1.4.8/rke_li…...

[FFmpeg] 常用ffmpeg命令

去水印 ffmpeg -i water.jpeg -strict -2 -vf delogox300:y250:w56:h18:show0 no_water.jpeg 打时间戳 ffmpeg -i perf_60Hz_Raw.mp4 -vf "drawtextfontsize160:fontcolorred:text%{pts\:hms}" -c:v libx264 -an -f mp4 perf_output.mp4 -y ffmpeg -i perf_8k.mp4 -v…...

代码随想录训练营第五十七天|647. 回文子串、516.最长回文子序列

647. 回文子串 题目链接/文章讲解/视频讲解&#xff1a;代码随想录 1.代码展示 //647.回文子串 int countSubstrings(string s) {//step1 构建dp数组&#xff0c;明确dp数组的含义&#xff0c;dp[i][j]的含义是在下标为i和j区间内的字串是否为回文串vector<vector<bool&…...

对线程池设置做压测

线程池代码 Configuration public class ThreadPoolConfig {// 核心线程池大小private int corePoolSize 24;// 最大可创建的线程数private int maxPoolSize 25;// 队列最大长度private int queueCapacity 100;// 线程池维护线程所允许的空闲时间private int keepAliveSeco…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...