learning_notes

学习笔记

View project on GitHub

概念

  1. CPU上下文 CPU的寄存器(cpu内存)和程序计数器(指令) (Program Counter, PC)

  2. 一次系统调用过程,进程上下文,cpu上下文切换 一次系统调用过程,进程上下文不切换,CPU上下文切换(执行用户指令-执行内核指令-执行用户指令) 进程是由内核来管理和调度的,进程的切换只能发生在内核态。所以,进程的上下文不仅包括了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的状态。

  3. 什么时候会触发进程调度?
    • cpu分成一段一段的片,时间片分给各个进程,分给某个进程的时间分片,用完
    • 系统资源不足(比如内存) 进程挂起,等待其他进程释放
    • sleep主动挂起
    • 当有优先级更高的进程需要执行,挂起当前
    • 硬件中断 中断处理比进程拥有更高的优先级
  4. 线程与进程最大的区别在于 线程是调度的基本单位,而进程则是资源拥有的基本单位

  5. cache和buffer的区别 cache :高速缓存区,解决的是时间问题,cpu到内存 内存和磁盘 buffer:缓冲区,解决的是空间问题

  6. 中断 linux 中的中断分2部分: 上半部对应硬件中断, 用来快速处理中断 #cat/proc/interrupts 下半部对应软中断,用来异步处理上半部未完成的工作 # cat /proc/softirqs 包括网络收发、定时、调度、RCU 锁等各种类型

  7. 内存映射

将虚拟内存和物理内存映射的一张页表(MMU),处理器可以通过页表直接访问物理内存

内存吃紧的时候:

  • LRU算法
  • 写到Swap
  • 杀死进程
  1. 虚拟内存空间分布

虚拟内存空间分布

  1. 只读段:代码和常量
  2. 数据段:全局变量
  3. 堆:动态分配的内存,从低地址到高地址
  4. 文件映射段:动态库,共享内存,从高地址向下
  5. 栈:局部变量和函数调用的上下文,一般8M

  6. 文件系统 每个文件有2个数据结构
    • 索引节点(inode) :记录文件的元信息(大小,权限,位置)
    • 目录项(directory entry) :记录文件的名字,索引节点指针,其他目录项的关联关系
  7. 文件读写方式分类: 根据是否利用标准库:缓存i/o ,非缓存i/o 根据是否使用系统页缓存:直接i/o,非直接i/o 根据应用程序是否阻塞:阻塞i/o,非阻塞i/o 根据是否等待响应结果:同步i/o,异步i/o

机械磁盘最小的读写单位是扇区,一般为512字节 固态磁盘的最小单位是页,通常是4k,8k

在数据库,小文件等随机读写的场景,IOPS(每秒io数)更能反应系统的整体性能,在顺序读写的场景中,吞吐量更能反应性能

磁盘性能检测指标:
使用率:磁盘处理I/O的时间百分比,使用率只考虑有没有I/O,不考虑I/O的大小。注意当使用率为100%时,由于可能存在并行I/O,磁盘并不一定饱和,所以磁盘仍然可能接收新的I/O请求
饱和度:磁盘处理I/O的繁忙程度,注意当饱和度为100%时,磁盘不能接收新的I/O请求
吞吐量:每秒I/O请求大小
IOPS:Input/Output Per Second 每秒的I/O请求数
响应时间:I/O请求从发出到收到响应的间隔时间

  1. 网卡收发报文的过程 ```bash
  2. 内核分配一个主内存地址段(DMA缓冲区),网卡设备可以在DMA缓冲区中读写数据
  3. 当来了一个网络包,网卡将网络包写入DMA缓冲区,写完后通知CPU产生硬中断
  4. 硬中断处理程序锁定当前DMA缓冲区,然后将网络包拷贝到另一块内存区,清空并解锁当前DMA缓冲区,然后通知软中断去处理网络包。

    当发送数据包时,与上述相反。链路层将数据包封装完毕后,放入网卡的DMA缓冲区,并调用系统硬中断,通知网卡从缓冲区读取并发送数据。 ```