![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 56
牛牛coding
念念不忘,必有回响。
展开
-
虚拟地址和物理地址
1、地址概念物理地址:物理内存就是真实的内存,CPU的地址线可以直接进行寻址的内存空间大小。比如在32位平台下,寻址的范围是2^32也就是4G,并且这是固定的。在实际的应用中,很多的应用程序都比较大,计算机实际所配置的内存空间无法满足。所以出现了虚拟内存技术。经过不断有目的的换入和换出,处理器似乎是拥有了一个大于实际物理内存的内存空间。于是,这个存储空间叫做虚拟内存空间,而把真正的内存叫做实际物理内存,或简称为物理内存。对32位处理器,虚拟内存空间为4G,每个进程都认为自己拥有4G的空间;实际上,原创 2021-09-28 21:05:29 · 12108 阅读 · 0 评论 -
序列化和反序列化
1、序列化和反序列化序列化指的是将一个内存对象转化成一串字节数据(存储在一个字节数组中),可用于保存到本地文件或网络传输。反序列化就是将字节数据还原成内存对象,能够轻松地存储和数据传输我们的系统大多是小端系统,而一般在网络传输中却规定使用大端传输;主机字节序=小端字节序(高位字节存储在内存高位地址);网络字节序=大端字节序。发送端总是把发送的数据转化为大端字节序然后发送。接收端根据自身选择是否转化。12 00 00 00 0c 小端=内存中低位字节在前 0c 00 00 00内存/*移位之原创 2021-09-20 10:33:32 · 102 阅读 · 0 评论 -
互斥锁,自旋锁,读写锁,乐观悲观锁
1、互斥锁和自旋锁基础的两种就是互斥锁和自旋锁,有很多⾼级的锁都是基于它们实现的,加锁的目的就是保证共享资源在任意时间⾥,只有⼀个线程访问,这样就可以避免多线程导致共享数据错乱的问题。当一个线程加锁后,其他线程加锁就会失败,失败的处理方式:互斥:线程释放CPU给其他线程。自旋:线程会忙等待,直到它拿到锁。忙等待锁互斥锁是⼀种独占锁,当线程 A 加锁成功后,此时互斥锁已经被线程 A 独占了,只要线程 A 没有释放⼿中的锁,线程 B 加锁就会失败,于是就会释放 CPU 让给其他线程,既然线原创 2021-09-06 09:52:35 · 393 阅读 · 0 评论 -
C++实现LRU算法
1、LRU概念:least recently used,最近最少使用是一种存页面置换算法;缺页异常(缺页中断):当 CPU 访问的页面不在物理内存时,便会产生⼀个缺页中断,请求操作系统将所缺页调入到物理内存。在第4步找空闲页,找不到空闲页的话,就说明此时内存已满了,这时候,就需要页面置换算法选择⼀个物理页。LRU 是通过历史的使用情况来推测要淘汰的页面。额外开销较大:需要寄存器和栈的硬件支持。完全实现 LRU,需要在内存中维护⼀个所有页面的链表,最近最多使用的页面在表头,最近最少使用的页面在表尾原创 2021-08-26 22:14:16 · 750 阅读 · 0 评论 -
孤儿进程和僵尸进程
1、孤儿进程当父进程退出而它的子进程还在运行,这些子进程将成为孤儿进程、孤儿进程将被init进程所接收,由init进程完成对它们的状态收集。(任何一个进程都必须有父进程)。2、僵尸进程多进程程序,父进程一般需要跟踪子进程的退出状态,当子进程退出,父进程在运行,子进程必须等到父进程捕获到了子进程的退出状态才真正结束。在子进程结束后,父进程读取状态前,此时子进程为僵尸进程。设置僵尸进程的目的是维护子进程的信息,以便父进程在以后某个时候获取。这些信息至少包括进程ID,进程的终止状态,以及该进程使用的CPU原创 2021-08-05 22:02:33 · 112 阅读 · 0 评论 -
进程的状态切换
除了创建和结束一般有三个状态:运行状态(Runing):该时刻进程占用CPU;就绪状态(Ready):可运行,由于其他进程处于运行状态而暂时停止运行;阻塞状态(Blocked):该进程正在等待某⼀事件发生(如等待输入/输出操作的完成)而暂时停止运行。就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状态,等待下一次调度。阻塞状态是缺少需要的资源原创 2021-08-04 21:09:14 · 1131 阅读 · 0 评论 -
内存调页算法+CPU调度算法
1、内存调页算法当进程访问虚拟地址时,会查看页表,如果发生对应的数据不再物理内存上会发生缺页异常,产生一个缺页中断去寻找空闲页,找不到空闲页的话,就说明此时内存已满了,就需要页面置换算法选择⼀个物理页。最佳页面置换算法(OPT)计算页面下一次访问时间,然后比较,选择未来最长时间不访问的页面,实际中无法实现,访问页面是动态的,用来衡量其他算法效率。先进先出置换算法(FIFO):选择在内存驻留时间很长的页面进行中置换。最近最久未使用的置换算法(LRU):完全实现 LRU,需要在内存中维护⼀个所有页面的原创 2021-08-03 22:25:34 · 655 阅读 · 0 评论 -
死锁必要条件和避免
死锁必要条件及避免算法1、死锁概念当两个线程为了保护两个共享资源而使用了两个互斥锁,他们在应用不当的时候,造成互相等待对方解锁,在没有外力作用下会一直等待无法继续运行,发生了死锁。本质原因 1、系统资源有限。 2、进程推进顺序不合理。死锁在满足下列四个条件才会发生:互斥条件持有并等待条件不可剥夺条件环路等待条件①互斥条件:多个线程不可同时使用同一个资源。②持有并等待条件:A在获取资源1,又想申请资源2,而此时资源2被C持有,A会进入等待状态,但是A在等待的时原创 2021-07-29 21:26:34 · 447 阅读 · 0 评论 -
同步IO和异步IO+IO模型
在说明同步IO和异步IO之前先说一下IO五大模式。1、五大IO模型①阻塞IO②非阻塞IO③IO多路复用IO④信号驱动IO⑤异步IO。阻塞IO:发起请求一直等到数据返回。A同学用杯子装水,打开水龙头装满水然后离开,水龙头没有水,他也要等到有水并装满杯子才能离开去做别的事情。非阻塞IO:不管有没有数据都返回,没有就隔一段时间再来请求,如此循环。在事件已经发生的情况下操作费阻塞IO,才能提高效率。所以非阻塞IO一般和其他IO一起使用,如IO复用,SIGIO信号。B同学也用杯子装水,打开水龙头后原创 2021-07-29 15:50:24 · 228 阅读 · 0 评论 -
进程通信和线程通信
进程通信和线程通信:1.进程间通信:①管道管道传输数据是单向的,如果想相互通信,我们需要创建两个管道才行,半双工。1.匿名管道,用完销毁。int pipe(int fd[2])⼀个是管道的读取端描述符 fd[0] ,另⼀个是管道的写⼊端描述符 fd[1] 。注意,这个匿名管道是特殊的文件,只存在于内存,不存于文件系统中。通信的数据是无格式的流并且大小受限。2.命名管道:因为数据是先进先出的传输方式。管道这种通信方式效率低,不适合进程间频繁地交换数据;所谓的管道,就是内核里面的⼀串缓存。从原创 2021-07-25 22:20:05 · 2834 阅读 · 0 评论 -
进程和线程基础
进程和线程基本概念:进程是对运行时程序的封装,操作系统进行资源调度和分配的基本单位。线程是进程的子任务,是CPU调度和分配的基本单位。同⼀个进程内多个线程之间可以并发运行,同时多个进程之间共享代码段、数据段、打开的文件等资源,但每个线程各⾃都有⼀套独立的寄存器和栈,这样可以确保线程的控制流是相对独立的。区别:进程是资源分配的最小单位,线程是CPU调度的最小单位;进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存。(资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中原创 2021-07-25 22:14:26 · 94 阅读 · 0 评论