大西冰城的博客

大西冰城的博客

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

loading
跟我学操作系统(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设计思路在...
Linux内核启动探秘:从汇编到C语言的完整调用链路
从事嵌入式Linux这么久,一直在dts、驱动、应用等方面打转,对Linux的源码了解甚少。最近决定深入内核源码,就从最基础的问题开始:Linux内核是怎么启动的?它的主入口在哪里? 由于Linux内核是在持续更新中的,本文分析源码时内核版本为6.16.7,其实也大差不差的。 启动流程概览:从硬件到软件的过渡很多人可能以为Linux内核启动就像普通程序一样,直接从main函数开始。但实际上,在进入到C语言编写的main.c文件之前,系统必须先通过汇编代码完成最基础的硬件初始化工作。 这是因为此时硬件环境还没有准备好运行C语言代码。以x86架构为例,内核的入口文件是arch/x86/boo...
技术已死
编程曾经是少数人的专属技艺,神秘、昂贵、充满壁垒。现在AI几秒内能生成工业级代码,低代码平台让文科生也能拖出个应用。贬值的不只是某项技能,是整个”掌握技术就能掌握未来”的叙事。 技术致富的谎言技术圈最大的骗局,就是让你以为掌握技术就能掌握财富。 看看那些真正富有的人:马云不会写代码,刘强东的核心能力是读懂商业逻辑,王兴成功靠的是对人性的洞察。他们把技术当成锤子,而大部分程序员却把自己活成了钉子。更讽刺的是,那些能徒手写编译器、优化到极致的算法工程师,年薪可能还不如一个卖货主播一场直播的收入。 技术从来不是稀缺资源,稀缺的是对技术的支配权。 所谓”全栈工程师”,说穿了就是现代版的包身工...
Ubuntu Server 安装指南
ubuntu 的server版本是广泛使用的服务器操作系统,适用于各种服务器应用场景。本文将介绍如何安装 Ubuntu Server。 准备工作你需要准备以下内容: Ubuntu Server:Ubuntu Server下载页面 下载最新的 Ubuntu Server ISO 镜像,推荐使用 LTS版本,这样可以获得更长时间的支持和更新。 ventony:ventony 下载页面 这是一个开源的多启动工具,可以将你的优盘制作成启动盘,支持 ISO 镜像文件的直接引导。 优盘:至少 8GB 的容量,建议使用 USB 3.0 优盘以获得更快的读写速度。 制作启动盘打开ventony的官网...
Ubuntu使用netplan配置无线网络
新装了一台Ubuntu 24.04 LTS的服务器,nmtui似乎已经被移除,现在的Ubuntu版本需要使用netplan来配置无线网络,本文记录了配置过程。 查看无线网卡使用ip addr命令查看无线网卡的名称。 12345678910111213jr@dataserver:~$ ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:...
avatar
大西冰城
带专仔的野望