尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

操作系统 第5章操作系统的历史以及常见的题目

发布时间:2026/9/26 4:09:13

资讯中心
01
ARTICLE

操作系统 第5章操作系统的历史以及常见的题目

操作系统 第5章操作系统的历史以及常见的题目
补充 操作系统概论1.程序向操作系统的迈进linuxgcc-o hello hello.c//gcc -o选项用来指定输出文件如果不使用 -o 选项那么将采用默认的输出文件。例如默认情况下生成的可执行文件的名字默认为 a.out。//对于上述语句 hello就是我们用来输出的文件名字 hello.c就是我们的源文件名字//要注意好-c -o的区别 -c是生成目标文件2.信息就是context byte通过对于这个程序的存储我们很容易的得出一个结论在我们操作系统当中所有的信息包括磁盘上的信息内存中存储的信息数据库当中的数据图片音视频网络中传输的数据全部都是由一系列的二进制流比特表示。那么问题来了当我们面对一个字节序列的时候我们怎么知道这个序列是整数、字符还是别的什么乱七八糟的东西呢其实区分不同的数据对象的方式是根据一个数据所在的环境也叫做语境 context。在语言学当中语意学semantics不包含语境context语用学pramatics则考虑语境对于语意的影响。对应对编程当中同样如此一些编程的组件比如函数就需要根据当时的编译或者运行时的环境才可以理解他的语意运行时的结果。所以我们才看得见老外context-free language每一条的产生式的解释被称为semantics。其实就是类似我们以前做语文题目的那个结合上下文或者选词填空的那个路子。根据上下文的意思来判断这个空格应该填什么单词。对于编程语言的判别同理我们通过结合上下文来判断这是整数、浮点数、字符串还是一个机器指令。你查不到是因为上下文这个东西不是一个具体的东西上下文在不同的地方表示不同的含义要感性理解。context其实说白了和文章的上下文是一个意思在通俗一点我觉得叫环境更好。…林冲大叫一声“啊也”…问:这句话林冲的“啊也”表达了林冲怎样的心里答:啊你妈个头啊看一篇文章给你摘录一段没前没后你读不懂因为有语境就是语言环境存在一段话说了什么要通过上下文(文章的上下文)来推断。子程序之于程序进程之于操作系统甚至app的一屏之于app都是一个道理。程序执行了部分到达子程序子程序要获得结果要用到程序之前的一些结果(包括但不限于外部变量值外部对象等等)app点击一个按钮进入一个新的界面也要保存你是在哪个屏幕跳过来的等等信息以便你点击返回的时候能正确跳回如果不存肯定就无法正确跳回了。看这些都是上下文的典型例子理解成环境就可以(而且上下文虽然叫上下文但是程序里面一般都只有上文而已只是叫的好听叫上下文。。进程中断在操作系统中是有上有下的不过不给题主说了免得产生新的问题)这就是context的含义至于这个单词到底是谁直接翻译成上下文的站出来我保证不打死你3.操作系统在硬件之上是软件。大部分计算机有两种运行模式 内核态 和 用户态 软件中最基础的部分是 操作系统 它运行在 内核态 中内核态也称为 管态 和 核心态 它们都是操作系统的运行状态只不过是不同的叫法而已。操作系统内核负责管理硬件资源如内存分配、进程调度、设备驱动等并提供了一组系统调用接口供用户态程序使用。用户接口程序(shell 或者 GUI) 处于用户态中是用户与操作系统交互的方式。并且它们位于用户态的最低层允许用户运行其他程序例如 Web 浏览器、电子邮件阅读器、音乐播放器等。而且越靠近用户态的应用程序越容易编写如果你不喜欢某个电子邮件阅读器你可以重新写一个或者换一个但你不能自行写一个操作系统或者是中断处理程序。这个程序由硬件保护防止外部对其进行修改。这张图还强调了操作系统所处的位置它介于硬件和用户之间起到了管理和协调的作用。用户态的应用程序无法直接访问硬件必须通过操作系统内核提供的服务来间接访问。这样的设计提高了系统的安全性避免了恶意软件或错误的程序破坏系统稳定性。同时这也意味着用户态的应用程序更容易编写和维护因为它们不需要直接处理底层硬件细节。4.计算机硬件简介5.CPUCPU就是中央处理单元CPU的作用简单点说就是处理和执行指令。这些指令构成了程序。它是一个核心组件但不是唯一组件。它是计算机的大脑。正因为它是处理指令的前面我们又讲过内存是存放指令的。CPU又是大脑我们都知道大脑是用来下命令的。所以无论任何时候它都指向主存中的某个机器指令通过地址。但是它不是直接跟主存交互。而是通过一个内部组件叫做程序计数器PC也就是我们熟知的寄存器。所以寄存器的作用就是用来存储指向下一条指令的地址也就是即将执行的指令代码。为什么叫程序计数器呢这个就要牵扯到一个概念就是多线程。我们后面会详细讲解。所以说处理器要处理指令就需要从PC读取要处理的指令的地址然后处理指令。处理完当前指令以后处理器不可能只处理一条指令呀此时PC就要做相对应的更新。那么更新就牵扯到计算我需要计算新的数据和地址值。用来计算的东西我们就管它叫做算数/逻辑单元ALU。至此CPU要执行一条指令的过程也就彻底理出来了。处理器想要处理一条指令也需要通过一定的规则这个规则叫做指令集架构。处理器是完全按照指令集架构来的么在现代处理器中其实执行一条指令是一个非常复杂的过程。在现代处理器中实际又做了一层区分将指令集架构和处理器的微体系结构做了划分。指令集架构是用来描述每条机器代码指代的效果微体系结构是用来描述处理器的具体实现。在指令集中通常包含以下几种类型的指令加载指令用于将数据从内存加载到寄存器中。存储指令用于将数据从寄存器存回到内存中。运算指令用于对来自寄存器和内存的操作数进行运算例如 add 指令将两个操作数相加并将结果保存在寄存器或内存中。通过这种方式CPU可以高效地处理数据和执行复杂的计算任务。除了用于保存变量和临时结果的通用寄存器外大多数计算机还具有一些特殊的寄存器这些寄存器对于程序员是可见的。其中一个重要的寄存器是 程序计数器Program Counter, PC。程序计数器指示了下一条需要从内存中提取的指令的地址。当指令被提取后程序计数器会自动更新为下一条需要提取的指令的地址从而确保指令能够按正确的顺序执行。另一个重要的寄存器是 堆栈指针Stack Pointer, SP。堆栈指针指向内存中当前栈的顶端。它包含了函数调用过程中传递的参数、局部变量以及未保存在寄存器中的临时变量。通过堆栈指针CPU可以管理函数调用期间的数据和返回地址。6.内存计算机中的第二个主要组件是内存。理想情况下内存应该是非常快速的比执行一条指令还要快以避免拖慢CPU的执行效率同时容量足够大且成本低廉。然而当前的技术手段无法同时满足这三个要求。因此存储系统采用了一种分层次的结构来解决这个问题。寄存器之下是高速缓存它主要由硬件控制。主存被分割成高速缓存行cache lines通常每行大小为64字节。例如内存地址0-63对应高速缓存行0地址64-127对应高速缓存行1依此类推。使用最频繁的数据块被保存在位于CPU内部或非常靠近CPU的高速缓存中。当应用程序需要从内存中读取数据时高速缓存硬件会检查所需的高速缓存行是否在高速缓存中。如果在这就是高速缓存命中cache hit高速缓存会满足该请求无需通过总线将请求发送到主内存。高速缓存命中通常只需要两个时钟周期。如果未命中则需要从主内存中提取数据这将消耗大量时间。高速缓存行的数量受限于其高昂的成本。有些机器会有两到三级高速缓存每一级比前一级容量更大但速度略慢。通过以上例子我们可以看到将所需信息从一个地方复制到另一个地方会产生较大的开销。数据从磁盘加载到主存中然后处理器从主存中提取指令字符串也经历了从磁盘到主存再到显示器的过程。这一系列操作增加了系统的开销开销主要体现在数据复制上。因此系统设计者需要考虑如何让这些操作更高效地完成这时高速缓存就起到了关键作用。为什么会出现缓存呢这与硬件技术有关。通常较大的存储设备速度较慢不要拿固态和机械来抬杠哦而同等存储量的高速存储设备则更为昂贵。此外硬件的处理速度实际上又在一个瓶颈说白了发展到头了。很难在快速发展了。处理器与内存之间的速度差距变得越来越大。为了在不大幅增加成本的前提下提高数据处理效率设计者选择不在提高内存本身的速度上下功夫而是在处理器端引入高速缓存。高速缓存是一种更小、更快的存储设备作为处理器近期可能需要用到的数据的暂存区。利用计算机的局部性原理大部分内存操作可以在缓存中完成从而大大减少了访问主存的次数提升了整体性能。ublicclassMain{publicstaticvoidmain(String[]args){//验证局部性原理longsum0;int[][]dataArraynewint[10000][10000];for(inti0;i10000;i){for(intj0;j10000;j){//初始化数据dataArray[i][j]1;}}longbeginTimeSystem.currentTimeMillis();for(inti0;i10000;i){for(intj0;j10000;j){//初始化数据sumdataArray[i][j];}}System.out.println(sumcost(System.currentTimeMillis()-beginTime));beginTimeSystem.currentTimeMillis();for(inti0;i10000;i){for(intj0;j10000;j){//初始化数据sumdataArray[j][i];}}System.out.println(sumcost(System.currentTimeMillis()-beginTime));}}7.主存在存储系统的层次结构中紧接高速缓存之下的是主存Main Memory也称为RAMRandom Access Memory随机存取存储器。尽管在1950年代与1960年代计算机曾采用微小的可磁化铁氧体磁芯作为主存储介质因而那时主存有时也被称为核心存储器但现代技术已显著进化。所有未能通过高速缓存满足的内存访问需求最终都会转向主存处理。除了主存之外许多计算机还配备了一定量的非易失性随机存取存储器。这类存储器与RAM不同在电源断电后不会丢失内容。ROMRead Only Memory只读存储器的内容一旦存储后就不会被修改。ROM速度快且成本低因此如果有人问你有什么既快又便宜的存储设备答案就是ROM。在计算机中用于启动计算机的引导加载模块即bootstrap通常存储在ROM中。此外一些I/O卡也使用ROM来处理底层设备控制。另一类非易失性存储器包括 EEPROMElectrically Erasable Programmable Read-OnlyMemory电可擦可编程只读存储器 和 闪存Flash Memory 。与ROM不同EEPROM和闪存支持数据的擦除与重新写入尽管这一过程相较于写入RAM更为耗时。因此它们在使用上虽与ROM有相似之处但能通过重写数据来修正程序错误提供了更高的灵活性。闪存尤其被广泛应用于便携式存储设备中成为数码相机中的“数字胶卷”和便携式音乐播放器的“虚拟磁盘”。其速度介于RAM与磁盘之间但值得注意的是闪存存在擦写寿命限制频繁擦除会导致磨损。此外还有一类特殊的存储器—— CMOSComplementary Metal-Oxide-Semiconductor互补金属氧化物半导体 存储器尽管其存储的数据在断电后会丢失因此被认为是易失性的但许多计算机仍利用CMOS来保存当前的时间和日期信息确保即使在电源关闭后也能持续追踪这些关键数据。8.磁盘磁盘是一种机械装置在一个磁盘中有一个或多个金属盘片它们以 5400rpm、7200rpm、10800rpm 或更高的速度旋转。从边缘开始有一个机械臂悬横在盘面上这类似于老式播放塑料唱片33 转唱机上的拾音臂。信息会写在磁盘一系列的同心圆上。在任意一个给定臂的位置每个磁头可以读取一段环形区域称为 磁道(track) 。把一个给定臂的位置上的所有磁道合并起来组成了一个 柱面(cylinder) 。别慌这个知识点其实就建立在一个核心概念上。把这个概念吃透剩下的全是顺理成章的事。一、先补地基文件名 ≠ 文件本身在 Linux/Unix 文件系统里文件数据是这么存的目录项(dentry) inode(索引节点) 数据块┌──────────┬──────┐ ┌──────────┬────────┐ ┌──────────┐│ 文件名 │inode号│───▶│ 权限/大小 │数据块指针│───▶│ 实际内容 ││ hello.txt│ 12345│ │ 所有者 │ … │ └──────────┘└──────────┴──────┘ └──────────┴────────┘关键结论真正标识一个文件的是 inode 号文件名只是一个标签贴在 inode 上。你可以给同一个 inode 贴多个标签 —— 这就是硬链接。你也可以新建一个专门存路径的小文件指向另一个文件 —— 这就是软链接。二、硬链接hard link同一个文件的多个名字echo “hello” a.txt # 创建文件假设 inode 12345ln a.txt b.txt # 创建硬链接不加任何参数就是硬链接ls -li # -i 显示 inode 号输出12345 -rw-r–r-- 2 user group 6 Sep 25 a.txt12345 -rw-r–r-- 2 user group 6 Sep 25 b.txt注意三个细节inode 号完全一样都是 12345 → 它们是同一个文件不是副本。第二列数字变成 2 → 这是链接计数link count表示有几个名字指向它。改 b.txta.txt 的内容同步变反过来也一样。因为根本不存在两个文件。删掉其中一个会怎样rm a.txtcat b.txt # → 依然输出 hello完全正常因为 rm 其实叫unlink它只撕掉一个标签链接计数从 2 减到 1。只有当计数归零、且没有进程打开它时数据块才会被真正回收。三、软链接symbolic link / symlink一张写着地址的纸条ln -s a.txt c.txt # -s 就是 symbolicls -li输出12345 -rw-r–r-- 1 user group 6 Sep 25 a.txt54321 lrwxrwxrwx 1 user group 5 Sep 25 c.txt - a.txt区别非常明显inode 号不同54321 vs 12345 → 它是一个独立的新文件。权限是 lrwxrwxrwx开头那个 l 代表 link。大小是 5 字节就是字符串 “a.txt” 的长度→ 它的内容就是目标的路径字符串不是真实数据。箭头 - a.txt 告诉你它指向谁。删掉原文件会怎样rm a.txtcat c.txt # → cat: c.txt: No such file or directory死链接 / dangling linkls -l c.txt # → 红色闪烁的 c.txt - a.txt还在但废了纸条还在但照着纸条去找房子已经没了。四、一句话类比记住这个就够了类比硬链接 一个人有两个名字大名和小名。你叫他哪个名字来的都是同一个人。注销户口删名字不影响这个人活着直到最后一个名字也被注销。软链接 一张写着地址的便利贴。便利贴本身是个独立物件撕了它不影响房子但房子拆了便利贴就指了个空。Windows 里快捷方式 (.lnk) ≈ 软链接但快捷方式是用户态的东西symlink 是文件系统级的NTFS 也有硬链接和目录联结junction。五、核心对比表考试最爱考比较项 硬链接 软链接inode 号 与源文件相同 不同自己有独立 inode本质 同一 inode 的又一个目录项 一个独立的文件内容是目标路径能否跨文件系统/分区 ❌ 不能inode 号只在单个文件系统内唯一 ✅ 可以能否链接目录 ❌ 一般不行root 用 ln -d 除外会破坏树形结构 ✅ 可以源文件被删除后 ✅ 仍可通过链接访问内容 ❌ 变成死链接broken link对权限的影响 无独立权限与源文件共享 有自己的权限位但实际访问按目标文件权限算文件大小 就是数据大小 等于路径字符串的长度命令 ln 源 目标 ln -s 源 目标六、几个帮你彻底理解的反直觉例子例1硬链接看不出谁是源ln a.txt b.txt执行完这句a.txt 和 b.txt 地位完全平等不存在谁是原件谁是副本。所谓源文件只是你的心理概念。这一点跟软链接完全不同软链接有明确的方向性c.txt - a.txt。例2软链接可以指空气ln -s /tmp/不存在的文件 ghost.txtls -l ghost.txt # → ghost.txt - /tmp/不存在的文件照样创建成功系统不会检查目标是否存在。这是硬链接做不到的硬链接的目标必须存在。例3跨分区必崩假设 /home 和 /boot 在不同分区ln /home/a.txt /boot/b.txt # → ln: failed to create hard link: Invalid cross-device linkln -s /home/a.txt /boot/b.txt # ✅ 成功原因回到地基inode 号只在同一个文件系统内唯一跨分区就没法共用号码了。例4软链接的路径是相对的容易踩坑cd /tmpmkdir dir cd direcho hi file.txtln -s file.txt …/link.txt # 在上级目录创建链接cat …/link.txt # ❌ 可能报错为什么因为链接里存的是字面字符串 file.txt解析时是相对于链接文件自己所在目录/tmp而不是相对于你创建它时的位置。所以它会去找 /tmp/file.txt而文件其实在 /tmp/dir/file.txt。 经验写软链接尽量用绝对路径 ln -s /tmp/dir/file.txt /tmp/link.txt。例5怎么判断一个文件有几个硬链接ls -l # 第二列数字就是 link countstat a.txt # Links: 2find / -inum 12345 # 找出所有指向同一 inode 的名字排查重复文件神器七、常见考题 易错点“删除源文件后硬链接还能读吗” → 能。因为根本没有源大家平级。“软链接占不占磁盘空间” → 占但极小只占路径字符串那么点通常几十字节。“修改软链接的内容会改到原文件吗” → 会因为写入操作会顺着链接追到目标 inode。“cp 复制一个硬链接文件新文件还是硬链接吗” → 不是cp 默认是拷贝数据会产生新的 inode。要用 cp -a / cp -l 才能保留链接关系。“为什么硬链接不能链目录” → 如果允许目录结构就从树变成图了cd …、find、du 这些遍历算法会陷入死循环。这也是为什么每个目录下的 . 和 … 是特例。“软硬链接哪个性能更好” → 硬链接少一次路径解析跳转但差距微乎其微日常不用纠结。八、随手可以做的实验5分钟比看书管用cd /tmpecho “OS exam” original.txtln original.txt hard.txtln -s original.txt soft.txtstat original.txt # 看 Inode、Linksstat hard.txt # Inode 相同Links2stat soft.txt # Inode 不同Size 很小类型 Symbolic linkecho “changed” hard.txtcat original.txt # → OS exam changed同一个文件rm original.txtcat hard.txt # → 正常cat soft.txt # → No such file or directory死了跑一遍这套命令这节课基本就通了。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。