“Linux是怎样工作的“速读笔记

目录

  • 准备
  • 2 用户模式实现的功能
  • 3 进程管理
  • 4 进程调度
  • 5 内存管理
  • 6 存储层次(缓存)
  • 7 文件系统
  • 8 外部存储
  • `sar` 命令
    • 查看缺页中断
    • 查看swap使用

准备

下载代码

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 进程调度

  1. 吞吐量 延迟 两大指标
  2. 进程数多于逻辑CPU数量时,吞吐量不会继续提高
  3. 实验说明逻辑CPU会轮转分配时间片给所有的进程
  4. 运行时间:进程运行到结束总时间 执行时间:进程占用逻辑CPU的时间
  5. 改变优先级可用nice

5 内存管理

  1. 内存信息查看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 + 其他可释放内核内存

  1. 进程可以看见的是虚拟地址
  2. 页表保存在内核中
    进程正常访问自己的虚拟地址的时候,CPU参考页表内容,转换物理地址,不需要内核处理。
    访问非法虚拟地址空间,CPU产生缺页中断。
  3. mmap以页为单位,malloc以字节为单位
  4. 请求分页:分配内存是先分配虚拟内存,当进程首次访问某个页面的时候才会为其分配物理内存。
    页表有三个状态:未分配、已分配无物理内存、已分配有物理内存三种状态。
    内存不足可分为虚拟内存不足和物理内存不足两种。
  5. 写时复制:fork之后,父进程将页表复制给子进程。此时父子都没有写权限。
    当任意一方要写入时引发写时复制。
    被访问的页面被复制一份,分配给需要写入的进程。
    发起写入的进程,其页表项重新连接
    另一个进程,其页表项获得写入权限
  6. swap: 物理内存不足,出现物理内存申请,保存到外部存储。
    换入换出两种情形,因为以页为单位,所以称为分页。
    系统抖动:长期内存不足,访问内存操作导致页面不断换进换出。
  7. 多级页表:
    X86_64的虚拟地址空间是128TB
  8. 大页
    提高速度,减少页表的内存占用

6 存储层次(缓存)

  1. 高速缓存:内存数据缓存到高速缓存
  2. TLB:CPU专门有一块TLB ,作为虚拟地址转为物理地址的转换表。
  3. 页面缓存:外部存储缓存到内存
    进程读取文件,先把数据复制到内核内存的页面缓存,再把页面缓存复制到进程的内存当中。
    进程A更改文件内容后,会写回页面缓存并标注

7 文件系统

  1. 文件种类:普通文件、目录、设备文件
    注:网络适配器无设备文件
  2. 设备文件:块设备,字符设备
  3. 防止文件系统不一致:日志:更新所需原子概要写进日志文件&&写时复制:更新时先写到一个新位置,然后把之前的链接指向新位置
  4. 内存文件系统:下次开机就自动清理,创建于内存,速度快
  5. btrfs:下一代文件系统,提供快照,以btrfs文件系统为单位提供RAID

8 外部存储

  1. 块设备的通用处理被集成到内核中的通用块层,其中I/O调度器将访问块设备的请求积攒,进行如合并、排序操作(IO支援)
  2. 预读取是读取外部存储都会采用的方式
  3. 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

你可能感兴趣的:(linux)