![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 88
dx1313113
这个作者很懒,什么都没留下…
展开
-
(学习笔记-调度算法)磁盘调度算法
磁盘调度算法原创 2023-08-26 12:44:37 · 350 阅读 · 0 评论 -
(学习笔记-调度算法)内存页面置换算法
在了解内存页面置换算法前,我们得先了解。当 CPU 访问的页面不在物理内存中时,便会产生一个缺页中断,请求操作系统将缺页调入到物理内存。上面说的过程,第四步是能在物理内存找到空闲页的情况下。如果找不到空闲页的话:如果,就说明此时内存已经满了,这时候,就需要 [] 选择一个物理页,如果该物理页有被修改过(脏页),则把它换出到磁盘,然后把该被置换出去的页表项的状态改成 [无效的] ,最后把正在访问的页面装入到这个物理页中。页表项通常有以下字段:虚拟内存的管理整个流程:所以,的功能是,原创 2023-08-24 20:38:09 · 403 阅读 · 0 评论 -
(学习笔记-调度算法)进程调度算法
进程调度算法也称 CPU 调度算法,毕竟进程是由 CPU 调度的。当 CPU 空闲时,操作系统就选择内存中标的某个 [就绪状态] 的进程,将其分配给 CPU。什么时候会发生CPU调度呢?其中发生在 1 和 4 两种情况下的调度称为 [非抢占式调度] , 2 和 3 两种情况下发生的调度称为 [抢占式调度]。非抢占式的意思是,当进程正在运行时,它就会一直运行,直到该进程完成或发生某个事件而被阻塞时,才会把 CPU 让给其他进程。原创 2023-08-22 21:16:19 · 755 阅读 · 0 评论 -
(学习笔记-进程管理)什么是悲观锁、乐观锁?
读优先锁期望的是:读锁能被更多的线程持有,以便提高读线程的并发性,它的工作方式是:当读线程 A 先持有了读锁,写线程 B 在获取写锁的时候,会被阻塞,并且在阻塞过程中,后续来的读线程 C 仍然可以成功获取读锁,最后直到读线程 A 和 C 释放读锁后,写线程 B 才可以成功获取写锁,最后直到读线程 A 和 C 释放读锁后,写线程 B 才可以成功获取写锁。怎么样才算发生冲突?所以说,写锁是独占锁,因为任何时刻只能有一个线程有写锁,类似互斥锁和自旋锁,而读锁是共享锁,因为读锁可以被多个线程同时持有。原创 2023-08-19 21:35:27 · 364 阅读 · 0 评论 -
(学习笔记-进程管理)怎么避免死锁?
简单来说,死锁问题的产生是由两个或者以上线程并行执行的时候,争夺资源而互相等待造成的。死锁只有同时满足互斥、持有并等待、不可剥夺、环路等待这四个条件的时候才会发生。所以要避免死锁问题,就是要破坏其中一个条件即可,最常用的方法就是使用资源有序分配法来破坏环路等待条件。原创 2023-08-16 21:11:11 · 409 阅读 · 0 评论 -
(学习笔记-进程管理)多线程冲突如何解决
对于共享资源,如果没有上锁,在多线程的环境里,很有可能发生翻车。原创 2023-08-11 21:04:38 · 1112 阅读 · 0 评论 -
(学习笔记-进程管理)进程间有哪些通信方式?
由于每个进程的用户空间都是独立的,不能互相访问,这时就需要借助内核空间来实现进程间通信,原因很简单,每个进程都是共享同一个内核空间Linux内核提供了不少进程间的通信方式,其中最简单的就是管道,管道分为 匿名管道 和 命名管道。匿名管道:他没有名字标识,匿名管道是特殊文件只存在于内存,没有存在于文件系统中,shell命令中的 []竖线就是匿名管道,通信的数据是无格式的流并且大小受限,通信的方式是单向的,数据只能在一个方向上流动,如果要双向通信,需要创建两个管道,再来。原创 2023-08-09 21:55:34 · 457 阅读 · 0 评论 -
(学习笔记-进程管理)进程调度
进程都希望自己能够占用CPU进行工作,那么这涉及到前面说过的进程上下文切换。一旦操作系统把进程切换到运行状态,也就意味着该进程占用着CPU在执行,但是操作系统把进程切换到其他状态的时候,就不能在CPU中执行了,于是操作系统会选择下一个要运行的进程。选择一个进程运行这一功能是在操作系统中完成的,通常称为。原创 2023-08-09 10:46:19 · 330 阅读 · 0 评论 -
(学习笔记-进程管理)线程
线程是进程当中的一条执行流程。同一个进程内多个线程之间可以共享代码段、数据段、打开的文件等资源,但每个线程各自都有一套独立的寄存器和栈,这样可以确保线程的控制流是相对独立的。线程的优缺点?一个进程中可以同时存在多个线程各个线程之间可以并发执行各个线程之间可以共享地址空间和文件等资源当进程中的一个线程崩溃时,会导致其所属进程的所有线程崩溃(这里针对C/C++语言)。举个例子,对于游戏的用户设计,则不应该使用多线程的方式,否则一个用户挂了,会影响其他同个进程的线程。原创 2023-08-06 17:02:35 · 284 阅读 · 0 评论 -
(学习笔记-进程管理)进程
当被阻塞进程所期待的事件出现时,如I/O完成获其所期待的数据已经到达,则由有关进程(如用完并释放I/O设备的进程)调用唤醒语句wakeup,将等待该事件的进程唤醒,首先将被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。一般来说,一个进程并不是自始至终连续不停地运行的,它与并发执行中的其他进程的执行是相互制约的。所以,在虚拟内存管理的操作系统中,通常会把阻塞状态的进程的物理内存换出到硬盘,等需要再次运行的时候,再从硬盘换入到物理内存。原创 2023-08-04 19:09:22 · 336 阅读 · 0 评论 -
(学习笔记-内存管理)如何避免预读失效和缓存污染的问题?
Linux操作系统为基于Page Cache的读缓存机制提供预读机制。应用程序只想读取磁盘文件A的offset 为 0-3KB范围内的数据,由于磁盘的基本读写单位为block(4KB),于是操作系统至少会读 0-4KB内容,这恰好可以在一个page中装下但是操作系统出于空间局部性原理(靠近当前被访问数据的数据,在未来很大概率会被访问到),会选择将磁盘块offset[4KB ,8KB]、[8KB, 12KB]、[12KB, 16KB]都加载到内存中,于是额外在内存中申请了 3 个page;原创 2023-07-31 20:27:18 · 704 阅读 · 0 评论 -
(学习笔记-内存管理)内存满了会发生什么?
后台内存回收:物理内存紧张的时候,会唤醒kswapd内核线程来回收内存,这个回收内存的过程是异步的,不会阻塞进程的执行直接内存回收:如果后台异步回收跟不上进程内存申请的速度,就会开始直接回收,这个回收内存的过程是同步的,会阻塞进程的执行。文件页的回收:对于干净页式直接释放内存,这个操作不会影响性能,而对于脏页会先写回到磁盘再释放内存,这个操作会发生磁盘I/O的,这个操作会影响系统性能。原创 2023-07-31 14:34:03 · 335 阅读 · 0 评论 -
(学习笔记-内存管理)内存分段、分页、管理与布局
为了在多进程的环境下,使得进程之间的内存地址不受影响,相互隔离,于是操作系统就为每个进程单独分配一套虚拟内存地址,每个程序只关心自己的虚拟地址就可以,实际上大家的虚拟地址都是一样的,但分布到的物理内存地址是不一样的。每个进程都有自己的虚拟空间,而物理内存只有一个,所以当启用了大量的进程,物理内存必然会很紧张,于是操作系统会通过内存交换技术,把不常使用的内存暂时存放到硬盘(换出),在需要的时候再装载回物理内存(换入既然有了虚拟内存地址,那必然要把虚拟地址[映射]到物理地址,这个过程通常由操作系统维护。原创 2023-07-29 21:08:35 · 464 阅读 · 0 评论 -
(学习笔记-内存管理)虚拟内存
如果第一个程序在 2000 的位置写入一个新的值,将会擦掉第二个程序存放在相同位置上的所有内容,所以同时运行两个程序是根本不可能的,这两个程序会立刻崩溃。但是有一个前提:每个进程都不能访问物理地址,至于虚拟地址最终怎么落到物理内存里,对进程来说是透明的,操作系统已经把这些都安排的明明白白了。如果程序要访问虚拟地址的时候,由操作系统转换不同的物理地址,这样不同的进程运行的时候,写入的是不同的物理地址,就不会冲突了。单片机是没有操作系统的,每次写完代码,都需要借助工具把程序烧录进去,这样程序才能跑起来。原创 2023-07-28 16:36:33 · 266 阅读 · 0 评论 -
(学习笔记-系统结构)Linux内核与windows内核
宏内核,包含多个模块,整个内核像一个完整的程序微内核,有一个最小版本的内核,一些模块和服务则由用户态管理混合内核,是宏内核和微内核的结合体,内核中抽象出了微内核的概念,也就是内核中会有一个小型的内核,其他模块就在这个基础上搭建,整个内核是一个完整的程序。Linux的内核设计采用了宏内核,Window的内核设计则是采用了混合内核。这两个操作系统的可执行文件格式也不一样,Linux可执行文件格式叫做ELF,Windows可执行文件格式叫做PE。原创 2023-07-27 15:54:22 · 831 阅读 · 0 评论 -
(学习笔记-硬件结构)CPU如何执行程序?
64位相比32位优势在哪?64位CPU性能一定比32位CPU高很多吗?64位CPU可以一次计算超过32位的数字,而32位CPU如果要计算超过32位的数字,要分多步骤进行计算,效率就没那么高,但是大部分应用程序很少会计算那么大的数字,所以只有运算大数字的时候,64位CPU的优势才能体现出来,否则和32位CPU的计算性能相差不大。通常来说64位CPU的地址总线是48位,而32位CPU的地址总线是32位,所以64位CPU可以寻址更大的物理内存空间。原创 2023-07-26 20:58:56 · 1204 阅读 · 1 评论