准备
下载代码
wget wget https://download.ituring.com.cn/book/download/a26203df-229d-41ba-bbd1-3af6ad2af0b1 -O learn.zip
mkdir code
unzip -d code learn.zip
2 用户模式实现的功能
这一章主要就是引入了系统调用将用户模式和内核模式分开的概念。实验主要是strace
看系统调用,sar -P
看用户模式和内核模式时间比例
3 进程管理
clone | execve | |
---|---|---|
目的 | 分出多进程处理 | 创建另一个程序 |
手段 | 复制父进程内存到子进程 | 读取可执行文件,新进程数据覆盖旧进程 |
4 进程调度
- 吞吐量 延迟 两大指标
- 进程数多于逻辑CPU数量时,吞吐量不会继续提高
- 实验说明逻辑CPU会轮转分配时间片给所有的进程
- 运行时间:进程运行到结束总时间 执行时间:进程占用逻辑CPU的时间
- 改变优先级可用
nice
5 内存管理
- 内存信息查看
free
$ free
total used free shared buff/cache available
Mem: 2030104 477484 93044 2320 1459576 1363824
Swap: 0 0 0
单位为KB
total 2030104KB
≈
\approx
≈ 2GB
available = free + 可释放buff/cache + 其他可释放内核内存
- 进程可以看见的是虚拟地址
- 页表保存在内核中
进程正常访问自己的虚拟地址的时候,CPU参考页表内容,转换物理地址,不需要内核处理。
访问非法虚拟地址空间,CPU产生缺页中断。 - mmap以页为单位,malloc以字节为单位
- 请求分页:分配内存是先分配虚拟内存,当进程首次访问某个页面的时候才会为其分配物理内存。
页表有三个状态:未分配、已分配无物理内存、已分配有物理内存三种状态。
内存不足可分为虚拟内存不足和物理内存不足两种。 - 写时复制:fork之后,父进程将页表复制给子进程。此时父子都没有写权限。
当任意一方要写入时引发写时复制。
被访问的页面被复制一份,分配给需要写入的进程。
发起写入的进程,其页表项重新连接
另一个进程,其页表项获得写入权限 - swap: 物理内存不足,出现物理内存申请,保存到外部存储。
换入换出两种情形,因为以页为单位,所以称为分页。
系统抖动:长期内存不足,访问内存操作导致页面不断换进换出。 - 多级页表:
X86_64的虚拟地址空间是128TB - 大页
提高速度,减少页表的内存占用
6 存储层次(缓存)
- 高速缓存:内存数据缓存到高速缓存
- TLB:CPU专门有一块TLB ,作为虚拟地址转为物理地址的转换表。
- 页面缓存:外部存储缓存到内存
进程读取文件,先把数据复制到内核内存的页面缓存,再把页面缓存复制到进程的内存当中。
进程A更改文件内容后,会写回页面缓存并标注
7 文件系统
- 文件种类:普通文件、目录、设备文件
注:网络适配器无设备文件 - 设备文件:块设备,字符设备
- 防止文件系统不一致:日志:更新所需原子概要写进日志文件&&写时复制:更新时先写到一个新位置,然后把之前的链接指向新位置
- 内存文件系统:下次开机就自动清理,创建于内存,速度快
- btrfs:下一代文件系统,提供快照,以btrfs文件系统为单位提供RAID
8 外部存储
- 块设备的通用处理被集成到内核中的通用块层,其中I/O调度器将访问块设备的请求积攒,进行如合并、排序操作(IO支援)
- 预读取是读取外部存储都会采用的方式
- HDD与SSD的区别:HDD有大量费时的机械处理(转磁头),SDD更快。
sar
命令
查看缺页中断
fault/s:每秒缺页中断次数
$sar -B 1
04:24:34 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
04:24:35 PM 0.00 0.00 114.00 0.00 8.00 0.00 0.00 0.00 0.00
查看swap使用
pswpin/s:每秒换入 pswpout/s:每秒换出
$sar -W 1
10:38:51 AM pswpin/s pswpout/s
10:38:52 AM 0.00 0.00