一台计算机上往往同时运行着浏览器、编辑器等多个程序。操作系统(Operating System,简称 OS) 位于底层硬件与应用程序之间,负责统一调度硬件资源并隔离不同程序。
操作系统管什么
操作系统的核心职责包括五个方面:
- 进程调度:分配 CPU 时间片,在多个运行中的程序之间切换。
- 内存管理与隔离(虚拟内存):为每个进程分配独立的虚拟内存空间。普通程序无法直接读取或修改其他进程(例如密码管理器)的内存,一旦越界访问就会被系统终止。
- 文件系统管理:将磁盘存储空间组织为目录与文件。
- 设备驱动管理:通过驱动程序将不同型号的网卡、显卡、磁盘封装成统一的读写接口供应用程序调用。
- 用户与权限控制:记录当前登录用户与运行进程的所属身份,在访问文件或系统资源时核对权限。
用户态、内核态与系统调用
为了防止普通软件绕过操作系统直接去动硬件,CPU 和操作系统把运行环境分成了两层:
- 内核态(Kernel Space):操作系统最核心的内核(Kernel)运行在这里,拥有最高硬件特权,可以访问所有物理内存和硬件设备。
- 用户态(User Space):平时用的浏览器、编辑器、聊天软件全都在用户态运行,受到严格限制,不能直接碰硬件,也不能看别的程序的内存。
当一个用户态程序需要读文件、发网络包或者申请内存时,必须通过系统调用(System Call)向内核打报告:由内核检查权限无误后,替它操作硬件,再把结果传回来。
注意
在 Windows 上选“以管理员身份运行”或在 Linux 下用 root 账号跑一个程序,这个程序依然运行在用户态,同样要走系统调用;区别只是内核检查权限时会给管理员身份放行更多系统配置。只有系统内核本身和硬件驱动才真正跑在内核态。
常见操作系统与 Linux 发行版
平时打交道最多的操作系统主要有:
- 桌面系统:Windows、macOS、Linux 桌面版。
- 手机系统:Android(底层基于 Linux 内核)、iOS。
- 服务器系统:互联网服务器和云主机绝大多数跑的都是 Linux,少数企业内网用 Windows Server。
严格来说,“Linux”原本只指操作系统内核。不同团队把 Linux 内核加上包管理器、基础工具和桌面打包在一起,就成了各种 Linux 发行版(Distro):比如常用来做服务器和开发的 Ubuntu / Debian、企业常用的 Rocky Linux / RHEL,以及专门预装了大量渗透测试工具的 Kali Linux。
代码是怎么跑起来的
程序员写的源代码要变成能跑的程序,常见有两种方式:
- 编译型(如 C、C++、Go、Rust):发布前先用编译器把源码直接翻译成对应系统和 CPU 架构的机器码可执行文件(如 Windows 的
.exe、Linux 的 ELF 文件),CPU 可以直接执行。 - 解释型(如 Python、JavaScript、PHP):运行时启动对应的解释器(比如
python3或node),由解释器一行行读取源码并执行。
而我们操作操作系统也有两种方式:用鼠标点窗口图标叫 图形界面(GUI);在终端里敲文本命令交给 Shell(如 Linux 的 bash、Windows 的 PowerShell)执行叫 命令行界面(CLI)。远程服务器一般不装图形桌面,后面做安全测试经常要直接用命令行操作。