第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扩展、通信控制平面、工业、汽车和消费…...
【codequ】Java学习路线整理(韩顺平)
文章目录Java学习路线一、Java基础1.建立编程思想Java概述变量运算符控制结构数据、排序和查找面向对象编程(基础)面向对象编程(中级)项目&学以致用2.提升编程能力3.分析需求,代码实现能力Java8新特性二、Java高级…...
服务器容器配置日志(Linux+x86_64+Ubuntu18.04+CUDA11.0+python3.7)
一、创建并进入容器 (平台使用教学详细,这部分略写) 登上服务器后,打开终端输入如下进入自己建的容器 ssh -p XXXXX root10.XXX.XXX.XXX //按自己的宿主机端口写二、安装Conda(miniconda3) (…...
2023年美赛赛题思路分析
2023年的赛题A-F题的整体难度不算太难,难度在于数据的收集上。整体难度上来看,难度上F题难度最小,建议直接上手。本次先给大家分享一些数据网站,在对各题做简单的思路分析。1、美国国家海洋和大气管理局Homepage | National Ocean…...
[C++]服务器与客户端建立连接与检测断开的demo
该程序在IP127.0.0.1以及端口5000环境下测试 有一段时间没有在Windows下用C进行网络编程了,这段日子都在做QT的网络编程和OpenCV的图像识别。 今天重新写个Windows下C的,基于TCP的双端连接建立与断开检测的demo,巩固下自己Windows下的网络编程…...
包教包会vue3+ts状态管理工具pinia
一、Pinia介绍 定义:pinia是和vuex一样的状态管理工具 语法:和 Vue3 一样,它实现状态管理有两种语法:选项式API 和 组合式API 支持:vue2、typeScript、devtools 二、使用步骤 1.安装 pnpm add pinia yarn add pin…...
Generated columns cannot be used in COPY
错误如下DBD::Pg::db do failed: ERROR: column "transtype" is a generated columnsec., avg: 2520 recs/sec), REPORTSINTERMEDIATETABLE in progress.DETAIL: Generated columns cannot be used in COPY. at /usr/local/share/perl5/Ora2Pg.pm line 15125.FATAL: …...
Amazon S3简介
前言: 这段时间来到了某大数据平台,做平台技术底座封装和一些架构等等,有结构化数据也有非结构数据,涉及到很多技术,自己也私下花时间去研究了很多,有很多纯技术类的还是需要梳理并记录,巩固以及…...
MySQL索引类型——有五种
文章目录前言一、MySQL中的索引类型有以下几种1.1 普通索引1.1.1 直接创建索引1.1.2 修改结构的方式添加索引1.1.3 创建表的时候同时创建索引1.1.4 删除索引1.2 唯一索引1.2.1 创建唯一索引1.2.2 修改表结构1.2.3 创建表的时候直接指定1.3 主键索引1.4 组合索引1.5 全文索引1.5…...
CloudCompare 二次开发(5)——非插件中的PCL环境配置(均匀采样为例)
目录 一、概述二、CMakeLists.txt三、源码编译四、代码示例五、结果展示一、概述 在进行CloudCompare二次开发的时候,可以直接在CloudCompare的核心功能中添加自己的算法,比插件式的算法集成要方便得多。因此,这里主要记录CloudCompare非插件式二次开发配置PCL,并给出具体开…...
停车辅助系统的技术和变化
各种各样的停车辅助系统已经存在了很长时间,但用户经常在不知道什么技术以及它是如何工作的情况下使用它们。 今天我们依次来谈谈停车辅助系统是什么,怎么发展以及如何应用的。 1.手信号 您可能会想,“为什么手信号是停车辅助系统&#x…...
网站建设开发能力很强的企业/seo网站优化方法
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。具有简洁、快速、安全,并行、有趣、开源,内存管理、v数组安全、编译迅速的特征。 Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央…...
wordpress 自媒体 主题/谷歌seo 外贸建站
目录说在前头:思路code:说在前头: 作为一个大学生,没想到这题我竟然没有一遍过emmm,思路还是挺简单的 太菜了太菜了,这才是入门组啊 思路 先观察数据范围 N< 10^100 (这个数很大 1后面100个零 我还以为很小呢太呆了) 因为只需要加上每一位的个数,所以我们使用字符串存…...
做网做网站建设/鹤壁seo推广
初级版轮播图,实现左右按钮切换图片,下方小点切换图片,简单的自动轮播 代码:(缺点,固定图片张数和宽度高度,每次用时都需要复制,代码累赘,多处功能不完善) …...
合肥企业建站程序/网店推广的重要性
消息中间件(消息队列) 一、概念 一般认为,消息中间件属于分布式系统中一个子系统,关注于数据的发送和接收,利用高效可靠的异步消息传递机制对分布式系统中的其余各个子系统进行集成。 高效:对于消息的处…...
万网 网站/信息如何优化上百度首页公司
大家好,我是农民兄弟乔哥,信用分应该说是大家非常关心的一个事,每天发文章都会不小心踩坑,触碰到规章制度,信用分被扣,信用分就是你在头条里的一个重要的约束条件,当信用分低于60就会关闭所有权…...
网易云外链wordpress/百度关键词排名推广工具
一、简介说明 1.关于VS Code开发工具,安装和配置,更多可以参考以前文章 2.关于Vue.js,Vue是一个优秀的渐进式前端框架,不仅易于上手,还便于与第三方库或既有项目整合。 3.关于Vue的使用方式有两种,第一种…...