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

第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年发布&#xff0…...

Vue中常见的几种组件间通信方法

1.props&#xff08;父传子&#xff09; 父组件Parent.vue <template><child :msg"message"></child> </template>父组件通过:val"value"的形式定义要传给子组件的值value绑定到val上 子组件Child.vue export default {//写法一…...

Outcome VS. Output:研发效能提升中,谁会更胜一筹?

2007 年&#xff0c;网景通信公司&#xff08;Netscape&#xff09;的联合创始人 Marc Andreessen 在博客 The Pmarca Guide to Startups 中提出 「Product/Market Fit」 &#xff0c;他写道&#xff0c; 「这意味着在一个良好的市场中&#xff0c;拥有能够满足该市场的产品。」…...

ptp4l与phc2sys进行系统时钟同步

linuxptp用于时钟同步。安装采用apt install linuxptp主要包含2个程序&#xff0c;ptp4l 进行时钟同步&#xff0c;实时网卡时钟与远端的时钟同步&#xff0c;支持1588 和 802.1AS 两种协议phc2sys 将网卡上的时钟同步到操作系统&#xff0c;或者反之命令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创建过程运行初始化容器&#xff08;init container&#xff09;过程运行主容器&#xff08;main container&#xff09;过程 容器启动后钩子&#xff08;post start&#xff09;、容器终止前钩子&#xff08;pre stop&#xff09;容器的存活性探测&#xff08;…...

高校房产管理系统用到了哪些技术?

数图互通高校房产管理系统是基于公司自主研发的FMCenterV5.0平通过在中国100多所高校的成功实施和迭代&#xff0c;形成了一套成熟、完善、全生命周期的房屋资源管理解决方案。台&#xff0c;是针对中国高校房产的管理特点和管理要求&#xff0c;研发的一套标准产品&#xff1b…...

【Python学习笔记】37.Python3 MySQL - mysql-connector 驱动(2)

前言 本章继续介绍MySQL - mysql-connector 驱动。 where 条件语句 如果我们要读取指定条件的数据&#xff0c;可以使用 where 语句&#xff1a; demo_mysql_test.py 读取 name 字段为 CSDN 的记录&#xff1a; import mysql.connectormydb mysql.connector.connect(host…...

【高级Java】高级Java实验

一、反射与动态代理1、&#xff08;4分&#xff09;请通过反射技术&#xff0c;为附件中的Person.class生成相应的.java代码&#xff0c;java代码中的方法的方法体为空&#xff0c;即方法内部代码不用生成。请注意生成的java代码的格式。2、&#xff08;3分&#xff09;请为第1…...

SYN480R 解码

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

ASP .NET(基于.NET 6.0)源码解读

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

阿里工作7年,一个30岁女软件测试工程师的心路历程

简单的先说一下&#xff0c;坐标杭州&#xff0c;14届本科毕业&#xff0c;算上年前在阿里巴巴的面试&#xff0c;一共有面试了有6家公司&#xff08;因为不想请假&#xff0c;因此只是每个晚上去其他公司面试&#xff0c;所以面试的公司比较少&#xff09; 其中成功的有4家&am…...

学生党必备的 Keychron 无线机械键盘

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

FPGA MAX 10 10M50系列10M50DAF484C8G/10M50DAF484C7G/10M50DCF484C7G规格

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

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

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

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

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...