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

准备

下载代码

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 进程管理

cloneexecve
目的分出多进程处理创建另一个程序
手段复制父进程内存到子进程读取可执行文件,新进程数据覆盖旧进程

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 fbtft是一个用于驱动液晶显示屏的开源框架。它通过在Linux内核中添加相应的驱动程序和设备树节点来实现对液晶显示屏的控制。fbtft的核心功能是将显示屏作为一个Frame Buffer设备来操作,并提供了一些函数来进行初始化、刷新、绘制等操作。 一个重要的概念是platform_driver,它会与设备树中带有 "sitronix,st7735r" 属性的节点进行匹配,并触发fbtft-core.c / fbtft_probe_common()函数。这个函数是fbtft的核心逻辑,它会执行液晶显示屏的初始化操作。 在初始化操作中,通过执行par->fbtftops.init_display(par)函数来进行tft-lcd的初始化。这个函数会根据具体的液晶显示屏型号和配置,设置相关的参数并进行初始化操作。 总的来说,Linux fbtft是一个用于驱动液晶显示屏的开源框架,通过在Linux内核中添加驱动程序和设备树节点来实现对液晶显示屏的控制。它提供了一些函数来进行初始化、刷新、绘制等操作,通过platform_driver与设备树中的节点进行匹配来触发相关操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Linux驱动开发 / fbtft源码速读](https://blog.csdn.net/wuweidonggmail/article/details/110914325)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值