1.手工阶段在计算机发展的最初阶段,并没有“操作系统”这一概念。那时要让计算机执行任务,人们必须先在纸带上手工打孔,打孔的位置代表二进制中的“1”,未打孔的空白处则代表“0”。一段简单的程序,往往需要制成一卷布满密密麻麻小孔的纸带。
纸带制作完成后,需送入专门的纸带机,由纸带机逐孔读取信息、转换为电信号,计算机才能启动并执行程序。整个过程完全依赖人工操作。出了问题也没别的办法,人们只能凭借肉眼,顺着纸带的每一个孔逐一检查,不仅耗时费力,效率也低得惊人。
flowchart LR
A["程序员手工打孔"] --> B["纸带"]
B --> C["纸带机读孔转信号"]
...
操作系统具备四个基本特征,分别是并发性、共享性、虚拟性和异步性。在这四个特征中,并发性与共享性是最为核心的两项,二者相互依存、互为前提,共同构成了操作系统高效运行的基础。具体而言,并发性指的是多个进程或线程在逻辑层面能够同时运行,这种并行执行的特性必然会引发多个主体对系统中同一批资源的竞争;反之,若系统中不存在资源的共享机制,多个进程或线程便无法实现真正意义上的并发,并发也就失去了存在的条件。另一方面,若系统始终只有单一进程独占所有资源并执行操作,不存在多个进程的并发需求,那么资源共享的概念便无从谈起,共享也就失去了其实际意义。
1. 并发性并发性指的是系统能够同时“运行”多个进程,这里...
操作系统,想必大家都不陌生。我们日常使用的电脑、手机、平板等各类智能设备,都离不开它的支撑——Windows、macOS、Linux、Android、iOS、鸿蒙,这些熟悉的名字,背后都是操作系统的身影。
它就像一位隐形的“管家”,将一堆看似零散、毫无关联的硬件零件,有序组织、高效协调,最终搭建出一个便捷的交互平台,承载着我们日常的工作、学习与娱乐,成为人与设备、程序与硬件之间不可或缺的桥梁。那么,操作系统到底是什么?它是如何默默工作、协调各方的?它又包含哪些核心概念和组成部分?在这篇文章中,我们将一同走进操作系统的世界,拆解它的基本概念,帮助大家更好地理解这个看似神秘、却早已渗透生...
各种开发板已经买了不少,实在不想再买新的了,于是想着干脆自己写一个 8051 模拟器——8051 的指令集一共就 111 条,用软件实现完全可行。最终用 Rust 实现了一个 8051 模拟器,代码已开源在 GitHub,欢迎参阅:mcs51-emulator
为什么用Rust来实现8051模拟器在此之前,我曾写过一个”甜品级”解释型编程语言,叫Sparrow(中文名叫灵雀),用C语言实现的仓库链接(已经烂尾)。构建过程中遇到了无数次内存泄漏和野指针,即使借助AI,解释器里还是留着不少这类问题。这次改用Rust,内存安全这块就不用操心了,可以把精力放在模拟器逻辑本身。
CPU设计思路在...
从事嵌入式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 ISO 镜像,推荐使用 LTS版本,这样可以获得更长时间的支持和更新。
ventony:ventony 下载页面 这是一个开源的多启动工具,可以将你的优盘制作成启动盘,支持 ISO 镜像文件的直接引导。
优盘:至少 8GB 的容量,建议使用 USB 3.0 优盘以获得更快的读写速度。
制作启动盘打开ventony的官网...
新装了一台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:...
在嵌入式开发过程中,经常遇到从8GB/32GB的SD卡导出系统.img镜像文件,然而dd命令导出的镜像文件会把整个SD卡的内容都包含在内,包括未使用的空间,当你想把这个镜像文件烧录到一个更小的SD卡时,就会出现空间不足的问题。为了避免这种情况,我们需要对镜像文件进行瘦身处理,去除未使用的空间。
1234567891011121314151617181920212223242526272829303132#!/bin/bash# 自动剔除镜像未使用空间的脚本IMAGE="$1"if [ -z "$IMAGE" ]; then echo...
今天遇到个需求,是一个一对多的数据,因为数据量过于庞大,导致请求异常缓慢,于是要给这个数据加分业,出现了分页数据条数不正确的问题,先来看看原数据是怎么写的
问题复现123456789@Datapublic class ProjectReceivablesVo implements Serializable { private String projectId; // 项目id private String customerNo;//客户编号 private String projectNo; // 项目编号(自动生成) ...省略一堆属性.....