进程调度算法

1.先来先服务:从后备作业(进程)队列中选择一个或多个最先进入该队列的作业(进程),将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。
2.短作业优先:选择估计运行时间最短的进程,调入内存
3.高优先级优先:选择优先级最高的进程,调入内存
4.时间片轮转:每个进程执行一个时间片
5.多级反馈队列调度算法:综合前面多种调度算法

CFS调度算法

CFS(Completely Fair Scheduler,完全公平调度器)为每个进程维护一个虚拟运行时间(vruntime),表示进程已经使用的 CPU 时间。vruntime 的增长速度与进程的优先级(权重)成反比:优先级越高,vruntime 增长越慢。
CFS 使用红黑树来管理所有可运行进程,按 vruntime 排序。每次调度时,CFS 从红黑树中选择 vruntime 最小的进程运行。
CFS 不固定时间片长度,而是根据进程的权重动态分配 CPU 时间。

内存管理

物理内存:寄存器、高速缓存、主存、磁盘
操作系统会对物理内存进行管理,内存管理器(memory manager)的主要工作是有效的管理内存,记录哪些内存是正在使用的,在进程需要时分配内存以及在进程完成时回收内存。

虚拟内存

操作系统为每一个进程分配一个独立的地址空间,就是虚拟内存。虚拟内存与物理内存存在映射关系,通过页表寻址完成虚拟地址和物理地址的转换。

为什么要用虚拟内存?
早期的内存分配方法存在以下问题:1.进程地址空间不隔离,会导致数据被随意修改;2.内存使用效率低;3.操作系统随机为进程分配内存空间,程序运行的地址不确定。

使用虚拟内存的好处
1.扩大地址空间,每个进程独占一个4G空间;2.内存保护,防止不同进程对物理内存的争夺,可以对特定内存地址提供写保护,防止恶意篡改;3.可以实现内存共享,方便进程通信;4.可以避免内存碎片,虽然物理内存可能不连续,但映射到虚拟内存上可以连续。

使用虚拟内存的缺点
1.虚拟内存需要额外构建数据结构,占用空间;2.虚拟地址到物理地址的转换,增加了执行时间;3.页面换入换出耗时;4.一页如果只有一部分数据,浪费内存。

申请内存
系统调用:brk和mmap

内核态 用户态

用户态:数据处理
内核态:系统调用(线程调用、数据读写…)、异常、设备中断

最近最少使用(Least Recently Used, LRU)

缓存淘汰算法,思路是将缓存中最近最少使用的对象删除掉
利用链表和hashmap
插入新数据时,如果新数据项在链表中存在,则将该项移到链表头部,如果不存在,则新建一个节点,放到链表头部,若缓存满了,则将最后一个节点删除
访问数据时,如果数据项在链表中存在,则把该节点移到链表头部,否则返回-1

页表

操作系统虚拟内存到物理内存的映射表
在系统启动时,操作系统将整个物理内存以 4K 为单位,划分为各个页。之后进行内存分配时,都以页为单位

线程间通信 同步方式

1.互斥量:采用互斥对象机制,只有拥有互斥对象的线程才可以访问。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
2.信号量:计数器,允许多个线程同时访问同一个资源。
3.条件变量:通过条件变量通知操作的方式来保持多线程同步。
4.读写锁:读写锁与互斥量类似。但互斥量要么是锁住状态,要么就是不加锁状态。读写锁一次只允许一个线程写,但允许一次多个线程读,效率比互斥锁要高。

进程有多少种状态?

创建、就绪、阻塞、运行、终止

mmap的原理及使用场景

mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read, write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。

使用场景:对同一块区域频繁读写操作;可用于实现用户空间和内核空间的高效交互;可提供进程间共享内存及相互通信;可实现高效的大规模数据传输。

死锁

多个进程在执行过程中,因争夺资源而造成了互相等待

产生的条件:死锁发生有四个必要条件:
1.互斥条件:进程对所分配到的资源不允许其他进程访问,若其他进程访问,只能等待,直到进程使用完成后释放该资源;
2.请求保持条件:进程获得一定资源后,又对其他资源发出请求,但该资源被其他进程占有,此时请求阻塞,而且该进程不会释放已经占有的资源;
3.不可剥夺条件:进程已获得的资源,只能自己释放,不可剥夺;
4.环路等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

解决方法:
1.资源一次性分配,从而解决请求保持的问题
2.可剥夺资源:当进程新的资源未得到满足时,释放已有的资源;
3.资源有序分配:资源按序号递增,进程请求按递增请求,释放则相反。
4.设置超时时间:超过规定时间,解锁

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐