第0章 一些你可能正感到迷惑的问题

news2024/9/21 4:32:43

操作系统是什么

操作系统是控制管理计算机系统的硬软件,分配调度资源的系统软件。
由操作系统把资源获取到后台给用户进程,但为了保护计算机系统不被损坏,不允许用户进程直接访问硬件资源。
操作系统相当于是一个分配资源的机构,用户进程的资源需要通过操作系统来分配,不同的事交给不同的资源进行工作。
系统事各种功能组合到一起后,产生最终输出的组合物。

软件是如何访问硬件的

硬件在输入输出上大体分为串行和并行,相应的接口也就是串行接口和并行接口。串行硬件通过串行接口与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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/352141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】string类(下)

文章目录1.迭代器(正向遍历)begin有两个版本2.反向迭代器(反向遍历)rbegin由两个版本3. at4. insert ——头插在pos位置前插入一个字符串在pos位置前插入n个字符在迭代器前插入一个字符5. erase从pos位置开始删除len个字符从迭代器位置开始删除6. replace——替换从pos位置开始…

【Linux】进程终止进程等待

文章目录进程创建fork函数初识fork函数返回值写时拷贝fork常规用法fork调用失败的原因进程终止进程退出场景进程常见退出方法进程等待进程等待必要性进程等待的方法wait方法waitpid方法获取子进程status从操作系统层面理解waitpid阻塞状态和非阻塞状态阻塞等待例子:多进程创建和…

设计模式 - 模板方法模式详解

介绍&定义 模板模式,全称是模板方法设计模式,英文是 Template Method Design Pattern。在 GoF 的《设计模式》一书中,它是这么定义的: Define the skeleton of an algorithm in an operation, deferring some steps to subcl…

从辅助驾驶到自动驾驶究竟还有多远?

/ 导读 /现如今,自动驾驶的噱头早已被厂家们放在台面上宣传了太多,小鹏汽车更是在最近宣称要在2023年在中国率先推出全自动驾驶,此言一出更是一石激起千层浪,而业内人士表示针对此类言论早已经见怪不怪了,更何况何小鹏…

计算机网络期末复习汇总(附某高校期末真题试卷)

文章目录一、选择题二、填空题三、名词解析四、简答题五、高校期末真题一、选择题 1、传输延迟时间最小的交换方法是( A ) A.电路交换 B.报文交换 C.分组交换 D.信元交换 2、在OSI七层结构模型中,处于数据链路层与运输层之间的是( B) A、物…

双代号网络图、双代号时标网络图、单代号网络图精讲

01进度管理—普通双代号网络1.识读、虚箭线(1)网络图的识读:基本组成及逻辑关系;(2)补充虚箭线:共用一个班组、共用一台机械;(3)网络图的基本绘制要求:①只有一个起点及终点;②箭线从小节点编号指向大编号&…

for var in 循环报错

近期对babel进行升级,突然爆出 Property left of ForInStatement expected node to be of a type ["VariableDeclaration","LVal"] but instead got undefined;的错误,不知为何;解决:for(var p in…

数据库如何分库分表

有了主从数据库为啥还需要分库分表 如果一个网站业务快速发展,那这个网站流量也会增加,数据的压力也会随之而来,比如电商系统来说双十一大促对订单数据压力很大,Tps十几万并发量,如果传统的架构(一主多从&a…

基于matlab设计x波段机载SAR系统

一、前言此示例说明如何设计在 X 波段工作的合成孔径雷达 (SAR) 传感器并计算传感器参数。SAR利用雷达天线在目标区域上的运动来提供目标区域的图像。当SAR平台在目标区域上空行进时,当脉冲从雷达天线发送和接收时,会产生合成孔径…

MySQL(一):B+ Tree,索引以及其优点, 索引实战, 聚簇索引和非聚簇索引, 最左匹配,索引失效

文章目录一、B TreeB Tree相比于红黑树的优点1. B树有更低的树高2. B树更符合磁盘访问原理二、MySQL索引2.1 B Tree索引2.2 哈希索引2.3 全文索引2.4 空间数据索引三、索引的优点以及什么时候需要使用索引什么时候需要使用索引四、索引实战建立普通索引建立唯一索引建立主键索引…

FreeRTOS内存管理 | FreeRTOS十五

目录 说明: 一、FreeRTOS内存管理 1.1、动态分配与用户分配内存空间 1.2、标准C库动态分配内存缺点 1.3、FreeRTOS的五种内存管理算法优缺点 1.4、heap_1内存管理算法 1.5、heap_2内存管理算法 1.6、heap_3内存管理算法 1.7、heap_4内存管理算法 1.8、hea…

节能降耗方案-医院能源管理系统平台的研究与应用分析

摘要:综合性医院作为大型公共机构,能耗高的问题日益突出,构建能耗监控平台对医院能耗量化管理以及效果评估已经成为迫切需要。建立智能能耗监控平台,对采集的能耗数据进行分析,实现对医院能耗平台监控,为医…

Server端的Actor,分工非常的明确,但是只将Actor作为一部手机来用,真的合适吗?

这是一篇介绍PowerJob,Server端Actor的文章,如果感兴趣可以请点个关注,大家互相交流一下吧。 server端一共有两个Actor,一个是处理worker传过来的信息,一个是server之间的信息传递。 处理Worker的Actor叫做WorkerRequ…

5、HAL库驱动W25Qxx

一、 SPI通信驱动W25Qxx 1、使用驱动文件快速配置工程代码驱动W25Qxx (此驱动文件只适合W25Qxx 16M及以下型号,因为访问地址位数不同) 注:本次使用SPI的方式进行访问W25Qxx Flash进行数据读写,关于W25Qxx芯片不会做…

10大主流压力测试工具各有所长,怎么选适合自己的?

市面上流行的压力/负载/性能测试工具多是来自国外,近年来国内的性能测试工具也如雨后春笋崛起。同时由于开发的目的和侧重点不同,其功能也有很大差异,下面就为您简单介绍10款目前最常见的测试产品。 1、kylinTOP测试与监控平台(商…

实现一个比ant功能更丰富的Modal组件

普通的modal组件如下&#xff1a; 我们写的modal额外支持&#xff0c;后面没有蒙版&#xff0c;并且Modal框能够拖拽 还支持渲染在文档流里&#xff0c;上面的都是fixed布局&#xff0c;我们这个正常渲染到文档下面&#xff1a; render部分 <RenderDialog{...restState}visi…

Lesson5.2---Python 之 NumPy 切片索引和广播机制

一、切片和索引 ndarray 对象的内容可以通过索引或切片来访问和修改&#xff08;&#xff09;&#xff0c;与 Python 中 list 的切片操作一样。ndarray 数组可以基于 0 - n 的下标进行索引&#xff08;先行后列&#xff0c;都是从 0 开始&#xff09;。 区别在于&#xff1a;数…

代码随想录算法训练营第三十二天 | 122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II

一、参考资料买卖股票的最佳时机IIhttps://programmercarl.com/0122.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BAII.html 跳跃游戏https://programmercarl.com/0055.%E8%B7%B3%E8%B7%83%E6%B8%B8%E6%88%8F.html 跳跃游戏 IIhttps://pr…

金三银四必备软件测试必问面试题

初级软件测试必问面试题1、你的测试职业发展是什么&#xff1f;测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前 3 年积累测试经验&#xff0c;按如何做好测试工程…

【数据结构期末例题】

前言 本文是博主自己在准备学校数据结构考试时的总结&#xff0c;各个知识点都贴有对应的详细讲解文章以供大家参考&#xff1b;当然文中还有许许多多的截图&#xff0c;这些是博主对主要内容的摘取&#xff0c;对于那些基础较好的同学可以直接看截图&#xff0c;减少跳转对应文…