大西冰城的博客

大西冰城的博客

记录生活、分享知识、探索世界

loading
跟我学操作系统(9):虚拟机
传统计算机传统计算机是指基于物理硬件直接运行操作系统和应用程序的计算机系统。它们依赖CPU、内存、硬盘等物理组件执行计算任务,操作系统直接对这些硬件资源进行管理,为用户提供操作界面和应用程序运行环境。传统计算机的性能与功能受限于物理硬件的能力,因此用户需要定期维护和升级硬件,以满足不断增长的计算需求。此外,一台物理计算机通常只能运行一个操作系统实例,且运行过程中无法同时支持多个操作系统环境。 虚拟机在商业化环境中,出于安全考虑,企业不希望将所有服务都部署在同一台物理计算机上,这会带来单点故障的风险(一个服务的故障可能导致整个系统瘫痪);同时,为每个服务单独购置一台物理计算机,又会造成硬件...
跟我学操作系统(8):操作系统的引导
操作系统的引导当操作系统安装到磁盘后,计算机无法直接启动系统,必须依靠引导程序完成对操作系统的加载并将控制权交给操作系统。引导程序的核心存储位置的是磁盘的主引导记录(MBR),这是磁盘的第一个扇区,固定大小为512字节,内部主要包含两部分关键内容:引导程序和分区表。 引导程序的核心功能的是将操作系统内核加载到计算机内存中,加载完成后立即将系统控制权交给内核;而分区表则用于记录磁盘上所有分区的关键信息,包括每个分区的起始物理位置、分区大小、分区类型(如系统分区、数据分区)等,为引导程序定位系统分区提供依据。 MBR对应的磁盘分区中,通常有一个被标记为活动分区的分区,这个分区就是操作系统的安...
跟我学操作系统(7):操作系统的体系结构
1.操作系统的内核内核是操作系统最核心、最基本的组件,由一系列内核程序构成,例如时钟管理程序、中断处理程序,以及一种被称为原语的特殊程序。原语处于操作系统的最底层,是最贴近硬件的程序,其运行具有 原子性 即执行过程中不会被任何中断打断,必须完整执行完毕后,才能继续运行其他程序,这一特性确保了系统底层操作的稳定性和一致性。除了上述硬件相关的管理功能,内核还负责对进程、存储器、文件系统等关键数据结构进行统一的管理与维护。不同操作系统在内核功能的划分上存在差异,由此衍生出两种核心的内核设计架构:宏内核(Monolithic Kernel)和微内核(Microkernel)。 1.1 宏内核宏内...
跟我学操作系统(6):系统调用
什么是系统调用之前我们说过,操作系统作为用户与硬件之间的接口,向上提供了一组系统调用(System Call)。用户程序通过这些接口请求内核提供服务。系统调用是用户态程序访问内核功能的标准入口,可以理解为一种特殊的函数调用,与库函数那种在用户空间执行的调用不同,系统调用会触发上一章提到的陷入指令,将执行权切换到内核态,由操作系统内核来处理请求,从而安全地访问和操作系统资源。库函数则是在系统调用的基础上提供了更高层次的封装,方便程序员用各种高级语言编写应用程序。值得注意的是,并非所有库函数都会调用系统调用,有些库函数只需在用户空间执行即可。 系统调用的过程当一个运行在用户态的程序需要发起系...
跟我学操作系统(5):中断和异常
中断的作用CPU上主要运行两种程序:用户程序和内核程序,这一点在上一章已详细讲解,此处不再赘述。而中断的核心作用,就是让操作系统重新夺回CPU的控制权,如果没有中断机制,一旦某个程序获得CPU执行权,就会一直占用CPU资源,操作系统无法介入调度其他程序,整个系统会陷入“卡死”状态,只能执行这一个程序,无法响应任何其他操作。 如此一来,操作系统的核心特性“并发性”就无从谈起。因此,我们可说没有中断,就没有真正意义上的操作系统。 中断的类型中断可以根据信号的来源不同分为由CPU内部产生的内部中断和由外部设备产生的外部中断两大类,内部中断常常与当前执行的指令有关,比如上一章提到的用户态下尝试执...
跟我学操作系统(4):操作系统的运行机制
1.内核程序与应用程序要清晰理解内核与应用程序在权限、行为上的核心差异,首先需明确CPU的两种运行模式:用户态和内核态,二者的运行环境和权限截然不同。 我们日常接触、开发的各类程序,无论是用户安装的软件,还是操作系统自带的工具、服务,都属于应用程序。这类程序均运行在用户态,自身不具备直接操作硬件、管理系统资源的权限,必须依赖操作系统提供的功能支持,才能完成各类任务。比如文件读写、网络通信、内存分配等操作,应用程序无法直接执行,需通过系统调用接口向操作系统发起请求,由操作系统统一处理请求、调度资源,以此保障系统的稳定性和安全性。 与之相对,有一类程序直接运行在操作系统的核心层面,核心职责是...
跟我学操作系统(3):操作系统的发展与分类
1.手工阶段在计算机发展的最初阶段,并没有“操作系统”这一概念。那时要让计算机执行任务,人们必须先在纸带上手工打孔,打孔的位置代表二进制中的“1”,未打孔的空白处则代表“0”。一段简单的程序,往往需要制成一卷布满密密麻麻小孔的纸带。 纸带制作完成后,需送入专门的纸带机,由纸带机逐孔读取信息、转换为电信号,计算机才能启动并执行程序。整个过程完全依赖人工操作。出了问题也没别的办法,人们只能凭借肉眼,顺着纸带的每一个孔逐一检查,不仅耗时费力,效率也低得惊人。 flowchart LR A["程序员手工打孔"] --> B["纸带"] B --> C["纸带机读孔转信号"] ...
跟我学操作系统(2):操作系统的四个特征
操作系统具备四个基本特征,分别是并发性、共享性、虚拟性和异步性。在这四个特征中,并发性与共享性是最为核心的两项,二者相互依存、互为前提,共同构成了操作系统高效运行的基础。具体而言,并发性指的是多个进程或线程在逻辑层面能够同时运行,这种并行执行的特性必然会引发多个主体对系统中同一批资源的竞争;反之,若系统中不存在资源的共享机制,多个进程或线程便无法实现真正意义上的并发,并发也就失去了存在的条件。另一方面,若系统始终只有单一进程独占所有资源并执行操作,不存在多个进程的并发需求,那么资源共享的概念便无从谈起,共享也就失去了其实际意义。 1. 并发性并发性指的是系统能够同时“运行”多个进程,这里...
跟我学操作系统(1):操作系统的基本概念
操作系统,想必大家都不陌生。我们日常使用的电脑、手机、平板等各类智能设备,都离不开它的支撑——Windows、macOS、Linux、Android、iOS、鸿蒙,这些熟悉的名字,背后都是操作系统的身影。 它就像一位隐形的“管家”,将一堆看似零散、毫无关联的硬件零件,有序组织、高效协调,最终搭建出一个便捷的交互平台,承载着我们日常的工作、学习与娱乐,成为人与设备、程序与硬件之间不可或缺的桥梁。那么,操作系统到底是什么?它是如何默默工作、协调各方的?它又包含哪些核心概念和组成部分?在这篇文章中,我们将一同走进操作系统的世界,拆解它的基本概念,帮助大家更好地理解这个看似神秘、却早已渗透生...
8051模拟器的设计与实现
各种开发板已经买了不少,实在不想再买新的了,于是想着干脆自己写一个 8051 模拟器——8051 的指令集一共就 111 条,用软件实现完全可行。最终用 Rust 实现了一个 8051 模拟器,代码已开源在 GitHub,欢迎参阅:mcs51-emulator 为什么用Rust来实现8051模拟器在此之前,我曾写过一个”甜品级”解释型编程语言,叫Sparrow(中文名叫灵雀),用C语言实现的仓库链接(已经烂尾)。构建过程中遇到了无数次内存泄漏和野指针,即使借助AI,解释器里还是留着不少这类问题。这次改用Rust,内存安全这块就不用操心了,可以把精力放在模拟器逻辑本身。 CPU设计思路在...
avatar
大西冰城
带专仔的野望