1. 计算机关键的硬件
CPU、内存、I/O控制芯片
2. SMP与多核
SMP:
Symmetrical Multi-Processing, 对称多处理器, 指具有多个CPU
多核:
单个CPU, 具有多个核心
从程序开发的角度来看, SMP和多核可以看做是同一个概念
3. 内存
程序直接使用物理内存存在的弊端:
- 地址空间不隔离
- 内存使用效率低
- 程序运行的地址不确定
内存管理常用的技术
- 虚拟地址
- 分段
- 分页
虚拟地址空间(Virtual Address)
- 每个程序都有独立的虚拟地址空间,32位的系统,虚拟地址空间为
0x00000000 - 0xFFFFFFFF
- 虚拟地址空间同物理内存空间一样,被分页管理,每一页的大小如
4kB
- 虚拟地址空间(虚拟内存)中的页有三种状态:
映射到物理页面
位于磁盘中
未使用的状态
4. 线程
标准线程:CPU的基本调度单位
- 一个进程可包含有多个线程
- 线程之间、线程和进程之间共享的数据有
进程的虚拟地址空间(代码段、数据段、堆等)、进程级的资源(打开的文件、信号)、进程的环境(用户id和组id) - 线程独有的
线程id、上下文(寄存器、PC)、errno变量、调度优先级
Linux线程:从内核的角度来看,Linux进程和线程都是 任务(Task),并没有本质区别
- Linux进程和线程的创建过程为:
fork() -> exec() -> clone()
clone()函数的flag参数决定了共享哪些资源,也即创建的是进程还是线程
进程和线程的区别
进程——资源分配的最小单位,线程——程序执行的最小单位
线程同步的方法
- 互斥量(Mutex)
- 信号量(Semaphore)
- 条件变量
- 读写锁