01. 进程与线程
操作系统通过进程和线程实现并发执行。
进程:
- 资源分配的基本单位
- 独立的地址空间
- 进程间通信(IPC):管道、共享内存、消息队列
线程:
- CPU 调度的基本单位
- 共享进程的地址空间
- 线程间同步:互斥锁、信号量
python
# Python 进程示例
import multiprocessing
import os
def worker():
print(f"子进程 PID: {os.getpid()}, 父进程 PID: {os.getppid()}")
if __name__ == '__main__':
print(f"主进程 PID: {os.getpid()}")
# 创建进程
processes = []
for i in range(3):
p = multiprocessing.Process(target=worker)
processes.append(p)
p.start()
# 等待进程完成
for p in processes:
p.join()
# Python 线程示例
import threading
import time
def print_time(name, delay):
for i in range(3):
time.sleep(delay)
print(f"{name}: {time.ctime()}")
# 创建线程
t1 = threading.Thread(target=print_time, args=("Thread-1", 2))
t2 = threading.Thread(target=print_time, args=("Thread-2", 3))
t1.start()
t2.start()
# 等待线程完成
t1.join()
t2.join()02. 内存管理
操作系统负责内存的分配和管理。
内存管理技术:
- 虚拟内存:每个进程有独立的地址空间
- 分页:将内存分成固定大小的页
- 分段:按逻辑单位划分内存
- 页面置换:内存不足时换出页面
text
# 虚拟内存概念
# 每个进程有独立的虚拟地址空间
# 通过页表映射到物理内存
# 进程虚拟地址空间布局(Linux x86-64)
# +------------------+
# | 栈 | <- 向下增长(局部变量、函数调用)
# | |
# +------------------+
# | ↓ |
# | |
# | ↑ |
# +------------------+
# | 堆 | <- 向上增长(动态分配)
# +------------------+
# | BSS | <- 未初始化全局变量
# +------------------+
# | 数据段 | <- 已初始化全局变量
# +------------------+
# | 代码段 | <- 程序代码(只读)
# +------------------+
# 页面置换算法
# FIFO:先进先出
# LRU:最近最少使用
# LFU:最不经常使用
# Clock:时钟算法
# 碎片问题
# 内碎片:分配给进程的内存大于实际需要
# 外碎片:内存中存在大量小的空闲块
# 解决方案
# 分页:消除外碎片
# 段页式:结合分段和分页的优点03. 文件系统
文件系统负责组织和管理存储设备上的数据。
文件系统类型:
- ext4:Linux 默认文件系统
- NTFS:Windows 文件系统
- APFS:Apple 文件系统
- FAT32:通用但有大小限制
文件系统结构:
- 超级块:文件系统元数据
- inode:文件元数据(不包含文件名)
- 数据块:实际文件内容
- 目录项:文件名到 inode 的映射
bash
# Linux 文件系统操作
# 查看文件系统信息
df -h # 磁盘空间使用
df -T # 文件系统类型
mount # 挂载点信息
# inode 信息
ls -i file.txt # 查看 inode 号
stat file.txt # 详细 inode 信息
df -i # inode 使用情况
# 文件类型
ls -la
# - 普通文件
# d 目录
# l 符号链接
# b 块设备
# c 字符设备
# p 命名管道
# s 套接字
# 文件权限
chmod 755 file.txt # rwxr-xr-x
chmod u+x file.txt # 给所有者添加执行权限
chown user:group file # 修改所有者和组
# 硬链接和软链接
ln source link_name # 硬链接
ln -s source link_name # 软链接(符号链接)
# 硬链接:共享 inode,不能跨文件系统
# 软链接:独立 inode,存储目标路径知识测验
第 1/4 题正确 0
进程和线程的主要区别是什么?
下一节
下一节 编译原理入门