第0章 一些你可能正感到迷惑的问题
操作系统是什么
操作系统是控制管理计算机系统的硬软件,分配调度资源的系统软件。
由操作系统把资源获取到后台给用户进程,但为了保护计算机系统不被损坏,不允许用户进程直接访问硬件资源。
操作系统相当于是一个分配资源的机构,用户进程的资源需要通过操作系统来分配,不同的事交给不同的资源进行工作。
系统事各种功能组合到一起后,产生最终输出的组合物。
软件是如何访问硬件的
硬件在输入输出上大体分为串行和并行,相应的接口也就是串行接口和并行接口。串行硬件通过串行接口与CPU通信,CPU通过串行接口与串行设备数据传输。并行设备访问类似。
访问IO接口的本质就是访问IO接口上面的寄存器。
应用程序是什么,和操作系统是如何配合到一起的
应用程序是通过系统调用来和操作系统配合完成某项功能的
应用程序是软件,操作系统也是软件,对于CPU来说它们没有区别。操作系统只是一种管理计算机的管理办法。
应用程序要用某种语言编写,编译器将语言翻译成某种机器指令。
应用程序加上操作系统提供功能才算是完整的程序,这个程序中的一部分是操作系统已经完成的,需要调用操作系统中提供好的函数才能完成,这个函数便是系统调用。
用户态与内核态是对CPU来讲的,是指CPU运行在用户态(特权3级)还是内核态(特权0级)
用户态是CPU运行应用程序,内核态是CPU运行操作系统的内核程序
为什么称为“陷入”内核
最外圈是应用程序,里面是操作系统。应用程序处于特权级3,操作系统内核处于特权级0.当用户程序要访问系统资源,它需要进行系统调用。这样CPU便进入了内核态,也称管态。
内存访问为什么要分段
内存按访问方式看,其结构就如同下图的长方形带子,地址依次升高。内存是随机读写设备,即访问其内部任何一处,不需要从头开始找,只要直接给出其地址便可。
分段是内存访问机制,是给CPU用的访问内存的方式,只有CPU才关注段。若加载程序运行,不管其是内核程序还是用户程序,程序中的地址若都是绝对物理地址,那该程序必须放在内存中固定的地方,两个编译出来地址相同的用户程序无法同时运行,于是,让CPU采用“段基址+段内偏移地址”的方式来访问任意内存。程序中需要用到哪块内存,只要先加载合适的段到段基址寄存器中,再给出相对于该段基址的偏移地址即可,CPU中的地址单元会将这两个地址相加后的结果用于内存访问,送上地址总线。
只要程序分了段,把整个段平移到任何位置后,段内的地址相对于段基址是不变的,无论段基址是多少,只要给出段内偏移地址,CPU就能访问到正确的指令。于是加载用户程序时,只要将整个段的内容复制到新的位置,再将段基址寄存器中的地址改成该地址,程序便可准确无误地运行,因为程序中用的是段内偏移,相对于新的段基址,该偏移地址处的内存内容还是一样的。
除此以外,程序分段可以将大内存分成可以访问的小段,通过在内存中来回挪位置的方式可以访问到任意内存位置。
代码中为什么分为代码段、数据段?这和内存访问机制中的段是一回事吗?
代码中为什么分为代码段、数据段?
在硬件的内存访问机制中,处理器要用硬件(段寄存器)指向以软件形式所定义的内存段。
在平坦模式下,硬件寄存器中指向的内存段为最大的4GB,而在多段模式下编程,硬件段寄存器中指向的内存段大小不一。在多段模型下的程序划分是程序员人为划分的。如果是在平坦模式下编程,操作系统将整个4GB内存都放在同一个段中。对于代码是否要分段,这取决于操作系统是否在平坦模型下。
一般的高级语言使用的编译器针对采用平坦模式的操作系统,因此不支持程序与自己分段,由于处理器的分页机制,编译器会将程序按内容自动划分为代码段和数据段。
CPU在执行当前指令时,可以获得下一条指令的地址,因为程序中的指令是挨着的不存在空隙,下一条指令的地址是按照前面指令的尺寸大小排下来的。
**为了让程序内指令接连不断地执行,要把指令全部排在一起,形成一片连续的指令区域,这就是代码段。**把数据连续地并排在一起存储形成的段落就称为数据段。
指令在物理上是连续的。不过对于CPU来说,指令在逻辑上是连续的就可以,即使数据和代码在物理上混在一起,只要程序中有指令能够跨过这些数据就行。(jmp)
将数据和代码分开的好处:
这和内存访问机制中的段是一回事吗?
编译出来的代码段是指一片连续的内存区域,这个段有自己的起始地址和大小范围。
用户进程的段只是为了便于管理,而编译器或程序员在“美学方面”做出的规划。
内存分段指的是处理器访问内存而采用的机制,称之为内存分段机制。程序分段是软件人为逻辑划分的内存区域,用于不同数据的归类,它本身也是内存,所以处理器在访问该区域时,也会采用内存分段机制,用段寄存器指向该区域的起始地址。
内存分段时为了能够访问内存,程序分段是为了更好的分配内存。
物理地址、逻辑地址、有效地址、线性地址、虚拟地址的区别
物理地址就是物理内存真正的地址,相当于内存中每个存储单元的门牌号,具有唯一性。
在实模式下,“段基址+段内偏移地址”经过段部件的处理,直接输出的就是物理地址,CPU可以直接用此地址访问内存。
在保护模式下,“段基址+段内偏移地址”称为线性地址。这里的段基址不是真正的地址,而是类似索引的选择子,通过这个索引便能在GDT中找到相应的段描述符。
若开启了分页功能,此线性地址又可称为虚拟地址,虚拟地址、线性地址在分页机制下是一回事,线性地址或称为虚拟地址,都不是真实的内存地址,它们都是用来描述程序或任务的地址空间。
段内偏移地址又称为有效地址,也称为逻辑地址。
什么是段重叠
不同段访问到相同的内存
什么是平坦模型
平坦模型指的就是一个段,用一个段就能够访问到硬件所支持的所有内存,段的大小可以是地址总线能够到达的范围。
cs、ds这类sreg段寄存器,位宽是多少
32位CPU有两种工作模式:实模式和保护模式
在实模式下,段寄存器中的值为段基址,是具体的物理地址,内存单元的逻辑地址仍为“段基址:段内偏移量”。在保护模式下,装入段寄存器的是段选择子。
sreg不管是工作在16位的实模式还是32位的保护模式,都是16位宽。
什么是工程,什么是协议
软件中的工程是指开发一套软件所需的全部文件,包括配置环境。
协议是一种大家共同遵守的规约,主要用来实现通信、共享、协作,给大家统一一种接口、一组数据调用或者分析的约定。
为什么Linux系统下的应用程序不能在Windows系统下运行
首先,格式不同。Linux下的可执行程序格式是elf,Windows下的可执行文件是PE格式。
其次,系统API不同,即应用程序编程接口。Linux中的API称为系统调用,是通过int 0x80这个软中断实现的。而Windows中的API是存放在动态链接库文件中,也就是DLL。
局部变量和函数参数为什么要放在栈中
堆是程序运行过程中用于动态内存分配的内存空间,是操作系统为每个用户进程规划的,属于软件范畴。
栈是处理器运行必备的内存空间,是硬件必须的,但又是有软件(操作系统)提供的。堆栈指的是栈。
局部变量只有自己在用,没必要放在数据段中浪费空间,将其放在自己的栈中可以随时清理,真正体现了局部的意义。
函数参数之所以会放到栈中,第一也是其局部性导致的,第二是因为函数是在程序执行过程中调用的,属于动态的调用,编译时无法预测会何时调用及被调用的次数,函数的参数及返回值都需要内存来存储,如果是递归调用的话,参数及返回值需要的内存空间也就不确定了,这取决于递归的次数。这些运行中产生的中间数据也没有必要放在数据段中。
为什么总说汇编语言比C语言快
编译型程序与解释型程序的区别
解释型程序相当于是一个文本,它需要通过编译器才能被执行。编译型语言编译出来的程序,运行时本身就是一个进程,它是由操作系统直接调用的。
什么是大端字节序、小端字节序
由内存的低地址到高地址,小端与实际数值位置顺序相反,大端与实际数值位置顺序相同,因为实际是从高到低排列的。
实际:0x12345678
小端:0x78,0x65,0x34,0x12
大端:0x12,0x34,0x56,0x78
BIOS中断、DOS中断、Linux中断的区别
BIOS中断调用的主要功能是提供了硬件访问方法,该方法使对硬件的操作变得简单易行。它和DOS建立的中断调用都是建立在中断向量表中的。它们都是通过软中断指令int中断号来调用的。
Section和Segment的区别
什么是魔数
有特定的表达方式,局外人不知道。
指令集、体系结构、微架构、编程语言
指令集是具体的一套指令编码。
微架构是指令集的物理实现方式。
体系结构是能使编译出的程序直接运行的平台。
库函数是用户进程与内核的桥梁
MBR、EBR、DBR、OBR
相关文章:

第0章 一些你可能正感到迷惑的问题
操作系统是什么 操作系统是控制管理计算机系统的硬软件,分配调度资源的系统软件。 由操作系统把资源获取到后台给用户进程,但为了保护计算机系统不被损坏,不允许用户进程直接访问硬件资源。 操作系统相当于是一个分配资源的机构,…...

MYSQL实战
SQL的处理 缓存解析查询优化(查询优化器) 重写查询;表的读取顺序;选择索引1.不要在索引上做任何操作 表达式函数 2.尽量全值匹配 联合索引中搜素条件后会根据最优条件排序进行查询,联合索引尽量都使用起来。搜索条…...

少儿户外拓展北斗定位解决方案
一、项目背景户外拓展训练是指通过专业的机构,对久居城市的人进行的一种野外生存训练。拓展训练通常利用崇山峻岭、翰海大川等自然环境,通过精心设计的活动达到“磨练意志、陶冶情操、完善人格、熔炼团队”的培训目的。针对户外拓展人员安全管理存在的实…...

更换ssl证书
更换ssl证书常用证书查看以及转换网址阿里云判断流量以及配置证书判断接入点阿里云控制台配置证书WAFAzure判断流量以及配置证书:判断接入点Azure配置证书CDNAPP GateWay常用证书查看以及转换网址 https://www.chinassl.net/ssltools/convert-ssl.htmlhttps://myss…...

线程池源码解析项目中如何配置线程池
目录 基础回顾 线程池执行任务流程 简单使用 构造函数 execute方法 execute中出现的ctl属性 execute中出现的addWorker方法 addWorker中出现的addWorkerFailed方法 addWorker中出现的Worker类 Worker类中run方法出现的runWorker方法 runWorker中出现的getTask runWo…...

Echarts 更改K线度颜色,解释K线图4个数字意义
第019个点击查看专栏目录本示例修改K线度的颜色,方法参考源代码。 这里面讲一下K线图的四个数字,如[20, 34, 10, 38], 第一位:20代表开盘价格, 第二位:34代表闭盘价格, 第三位:10代表最低价&…...
JavaScript和Java两种方法实现百度地图和高德、腾讯地图的相互转换
目录一、常见的经纬度标准二、百度地图和高德、腾讯地图经纬度的转换1、前端JavaScript转换2、后端Java实现转换一、常见的经纬度标准 高德、腾讯(使用GCJ02) GCJ-02坐标系,也称火星坐标系,由中国国家测绘局在02年发布࿰…...
Vue中常见的几种组件间通信方法
1.props(父传子) 父组件Parent.vue <template><child :msg"message"></child> </template>父组件通过:val"value"的形式定义要传给子组件的值value绑定到val上 子组件Child.vue export default {//写法一…...

Outcome VS. Output:研发效能提升中,谁会更胜一筹?
2007 年,网景通信公司(Netscape)的联合创始人 Marc Andreessen 在博客 The Pmarca Guide to Startups 中提出 「Product/Market Fit」 ,他写道, 「这意味着在一个良好的市场中,拥有能够满足该市场的产品。」…...
ptp4l与phc2sys进行系统时钟同步
linuxptp用于时钟同步。安装采用apt install linuxptp主要包含2个程序,ptp4l 进行时钟同步,实时网卡时钟与远端的时钟同步,支持1588 和 802.1AS 两种协议phc2sys 将网卡上的时钟同步到操作系统,或者反之命令demo:某主机P通过eth2连…...
使用注解JSON序列化
JsonSerialize(using ToStringSerializer.class) 将返回数据转成String序列化 JsonFormat(pattern "yyyy-MM-dd hh:mm",timezone"GMT8") 将日期数据转换成特定格式 使用JsonSerialize自定义注解接口 定义接口 import java.lang.annotation.ElementTyp…...

kubernetes教程 --Pod生命周期
Pod生命周期 pod创建过程运行初始化容器(init container)过程运行主容器(main container)过程 容器启动后钩子(post start)、容器终止前钩子(pre stop)容器的存活性探测(…...

高校房产管理系统用到了哪些技术?
数图互通高校房产管理系统是基于公司自主研发的FMCenterV5.0平通过在中国100多所高校的成功实施和迭代,形成了一套成熟、完善、全生命周期的房屋资源管理解决方案。台,是针对中国高校房产的管理特点和管理要求,研发的一套标准产品;…...
【Python学习笔记】37.Python3 MySQL - mysql-connector 驱动(2)
前言 本章继续介绍MySQL - mysql-connector 驱动。 where 条件语句 如果我们要读取指定条件的数据,可以使用 where 语句: demo_mysql_test.py 读取 name 字段为 CSDN 的记录: import mysql.connectormydb mysql.connector.connect(host…...
【高级Java】高级Java实验
一、反射与动态代理1、(4分)请通过反射技术,为附件中的Person.class生成相应的.java代码,java代码中的方法的方法体为空,即方法内部代码不用生成。请注意生成的java代码的格式。2、(3分)请为第1…...

SYN480R 解码
目录1.空载情况下2.当有按键被按下3.数据帧分析4.同步码5.数据码6.对24位数据帧分析1.空载情况下 在空载情况下,syn480r 输出引脚,输出的是杂乱无序的波形 2.当有按键被按下 按下按键,会连续输出相同的脉冲波形,放大分析 3.数据…...

ASP .NET(基于.NET 6.0)源码解读
这几天一直在琢磨在我现有技术认知基础上,未来如何做技术提升。 日思夜想,我整理出了我自己的一套学习规划方案,并希望在实施过程中能够不断调整学习方案与方式,以接近自我提升的效率最大化。 从以下几个大的方面来得到提升&…...

阿里工作7年,一个30岁女软件测试工程师的心路历程
简单的先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少) 其中成功的有4家&am…...

学生党必备的 Keychron 无线机械键盘
学生党必备的 Keychron 无线机械键盘 由于专业需要,之间的键盘使用起来不太舒服,于是准备重新买一个适合工作学习的键盘,于是通过朋友介绍了解到了keychron k3pro,当时也看到网上一些资料说道这款键盘比较到位,今天就来带大家了解…...

FPGA MAX 10 10M50系列10M50DAF484C8G/10M50DAF484C7G/10M50DCF484C7G规格
介绍MAX 10器件是单芯片、非易失性低成本可编程逻辑器件(pld),用于集成最优的系统组件集。MAX 10设备的亮点包括:内部存储双配置闪存用户闪存即时支持集成模数转换器(adc)支持Nios II单芯片软核处理器MAX 10设备是系统管理、I/O扩展、通信控制平面、工业、汽车和消费…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...