当前位置: 首页 > 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…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...