有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
假设有两个进程 A 和 B,它们需要使用两个资源 X 和 Y 才能完成任务。同时,A 拥有资源 X,但需要资源 Y;B 拥有资源 Y,但需要资源 X。如果 A 和 B 同时申请资源,然后互相等待对方释放资源,就会发生死锁。
具体来说,可以描述为以下几个步骤:
进程 A 获取资源 X。
进程 B 获取资源 Y。
进程 A 尝试获取资源 Y,但此时资源 Y 已被进程 B 占用,因此进程 A 等待资源 Y 的释放。
同时,进程 B 尝试获取资源 X,但资源 X 已被进程 A 占用,因此进程 B 等待资源 X 的释放。
在这种情况下,进程 A 和进程 B 互相等待对方释放资源,导致了死锁的发生。这是一个简单的死锁例子,展示了死锁产生的典型条件:互斥条件、请求与保持条件、不剥夺条件和循环等待条件。
if (typeof lightGallery !== 'undefined') {
var options = {selector: ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
虚拟地址与物理内存地址的映射是通过操作系统的内存管理单元(MMU)来实现的。MMU 使用页表来记录虚拟地址与物理地址之间的映射关系。下面是映射的具体过程:
当程序访问内存时,CPU 生成虚拟地址,并将其发送到内存管理单元(MMU)。
MMU 根据虚拟地址的高位索引页表,找到对应的页表项。
页表项中包含了虚拟地址与物理地址的映射关系,MMU 通过这个映射关系将虚拟地址转换为物理地址。
最终,CPU 使用物理地址来访问内存中的数据和指令。
这种虚拟地址到物理地址的映射关系使得每个进程都认为自己拥有整个系统的内存空间,而实际上每个进程只能访问自己的虚拟地址空间。这种映射关系的建立和维护是操作系统内存管理的核心功能,它实现了虚拟内存的功能,提高了系统的灵活性和可用性。
if (typeof lightGallery !== 'undefined') {
var options = {selector: '.gallery-item' ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
解决死锁的方法主要包括预防死锁、避免死锁和检测与解除死锁。
1. 预防死锁
破坏互斥条件 :允许多个进程同时访问资源,比如使用不可抢占资源。
破坏请求与保持条件 :进程在申请资源时,一次性申请所有需要的资源,如果无法一次性获取所有资源,则释放已经占有的资源。
破坏不剥夺条件 :允许操作系统剥夺进程已经获得的资源,以满足其他进程的需求。
破坏循环等待条件 :对资源进行排序,要求每个进程按照顺序申请资源,从而避免循环等待。
2. 避免死锁
安全序列算法 :比如银行家算法,通过安全序列算法来避免系统进入死锁状态,保证系统能够找到一个安全序列,从而避免死锁的发生。
3. 检测与解除死锁
死锁检测 :通过资源分配图等方式来检测系统中的死锁状态。
死锁解除 :一旦检测到死锁,可以采取剥夺资源、撤销进程等方式来解除死锁。
以上方法可以有效地预防、避免和解除死锁,保证系统的稳定和可靠运行。
if (typeof lightGallery ! ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
资源分配 :每个进程都有独立的内存空间,而线程共享所属进程的内存空间。
调度 :操作系统需要对多个进程进行调度,决定哪个进程可以执行,哪个进程需要等待;而线程的调度也是由操作系统进行管理,决定哪个线程可以执行,哪个线程需要等待。
通信 :不同进程之间需要进行通信,操作系统提供了多种进程间通信的机制;线程之间可以方便地进行通信,共享数据,但也需要注意线程安全的问题。
if (typeof lightGallery !== 'undefined') {
var options = {selector: '.gallery-item'};
lightGallery(document.getElementsByClassName('.article-gallery')[0], options);
}
var isMobile = navigator.userAgent ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
进程在操作系统中有五种状态,分别是 创建态 、 就绪态 、 运行态 、 阻塞态 和终止态。
创建态:当进程刚被创建时,它处于创建态。此时,操作系统正在为进程分配资源,初始化 PCB 等。在创建态下,进程还没有被加载到内存中执行。
就绪态:当进程已经准备好运行,但还没有被 CPU 调度执行时,它处于就绪态。在就绪态下,进程已经具备了运行的条件,等待 CPU 调度执行。
运行态:当 CPU 调度器选择了一个就绪态的进程,并开始执行它时,该进程处于运行态。在运行态下,进程正在被 CPU 执行,执行其指令。
阻塞态:当进程由于某些原因无法继续执行,比如等待 I/O 操作完成、等待某个事件发生等,它会进入阻塞态。在阻塞态下,进程暂时停止执行,等待条件满足后重新进入就绪态。
终止态:当进程执行完成或者被终止时,它进入终止态。在终止态下,进程释放占用的资源,操作系统回收 PCB 等,进程的生命周期结束。
这五种状态描述了进程在操作系统中的生命周期,操作 ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
进程的调度算法是操作系统用来决定哪个进程可以执行的一种策略,常见的进程调度算法包括:
先来先服务调度(FCFS):按照进程到达的先后顺序进行调度,先到达的进程先执行。这种调度算法简单直观,但可能导致长作业等待时间过长的问题。
最短作业优先调度(SJF):选择估计运行时间最短的进程优先执行,以减少平均等待时间。但需要预先知道每个进程的运行时间,对于长作业可能会出现饥饿现象。
优先级调度 :为每个进程分配一个优先级,优先级高的进程先执行。但可能导致低优先级进程长时间等待,出现饥饿现象。
时间片轮转调度(RR):每个进程被分配一个时间片,当时间片用完后,进程被放到就绪队列的末尾,等待下一次调度。这种算法适用于时间片短的场景,可以保证每个进程都有机会执行。
多级反馈队列调度 :将就绪队列分成多个优先级,每个队列采用不同的调度算法,高优先级队列的进程优先执行。如果一个进程在一个队列中执行的时间超过了一个时间片,它就会被移到下一个更低优先级的队列中。
...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
进程间通信是指不同进程之间进行数据交换和信息传递的方式,常见的进程间通信方式包括:
管道 :管道是一种半双工的通信方式,适用于具有亲缘关系的进程间通信。管道可以分为匿名管道和命名管道,匿名管道只能用于具有亲缘关系的父子进程间通信,而命名管道可以用于无亲缘关系的进程间通信。
消息队列 :消息队列是一种通过消息传递进行通信的方式,进程可以通过消息队列向其他进程发送消息,实现进程间的通信和同步。
共享内存 :共享内存是一种高效的进程间通信方式,多个进程可以将同一块内存空间映射到它们的地址空间中,实现数据共享。
信号量 :信号量是一种用于进程间同步和互斥的机制,可以用于解决进程间的竞争条件和临界区问题。
套接字 :套接字是一种用于网络通信的接口,也可以用于不同主机上的进程间通信。
文件 :进程可以通过读写文件的方式进行通信,比如一个进程将数据写入文件,另一个进程读取文件中的数据。
这些进程间通信方式可以根据具体的场景和需求进行选择和组合,以实 ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
页表是用来记录每个页对应的物理页框号、访问权限等信息的数据结构。它的作用是在分页机制下,用于将虚拟地址转换为物理地址,以便进程能够正确地访问内存中的数据和指令。
地址翻译过程
当程序访问内存时,CPU 生成的虚拟地址会包含页号和页内偏移量。
CPU 通过页表将页号转换为对应的物理页框号,然后将页内偏移量加上物理页框的起始地址,得到最终的物理地址。
这个地址翻译过程保证了每个进程都能够正确地访问自己的地址空间,而不会干扰其他进程的地址空间。页表的维护和管理是操作系统内存管理的核心功能之一,它实现了分页机制下的地址转换,提高了系统的稳定性和安全性。
if (typeof lightGallery !== 'undefined') {
var options = {selector: '.gallery-item'};
lightGallery(document.getElementsByClassName('.ar ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
ARP(Address Resolution Protocol)的工作原理如下:
IP 地址到 MAC 地址的映射查询 :当一个设备需要向另一个设备发送数据时,首先需要知道目标设备的 MAC 地址。发送设备会首先检查自己的 ARP 缓存表,如果找不到目标设备的 MAC 地址,则会发送一个 ARP 请求广播,询问局域网中所有设备:” 谁的 IP 地址是 X.X.X.X,告诉我你的 MAC 地址是什么?” 这个广播会被发送到局域网中的所有设备。
目标设备的应答 :目标设备收到 ARP 请求后,会检查自己的 IP 地址是否与请求中的 IP 地址匹配,如果匹配,则会发送一个 ARP 应答,包含自己的 MAC 地址。这个应答会直接发送给请求设备,而不是广播给整个局域网。
ARP 缓存表更新 :发送设备收到目标设备的应答后,会将目标设备的 IP 地址和 MAC 地址的映射关系存储在自己的 ARP 缓存表中,以便下次直接使用,避免再次发送 ARP 请求。
ARP ...
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
ARP 协议 (Address Resolution Protocol)解决了 IP 地址到 MAC 地址的映射问题。在局域网中,当一个设备需要向另一个设备发送数据时,需要知道目标设备的 MAC 地址,而目标设备的 IP 地址是已知的。ARP 协议就是用来解决这种 IP 地址到 MAC 地址的映射关系的。
ARP 协议的地位 ARP 协议在网络通信中扮演着非常重要的角色,它位于网络层和数据链路层之间,负责将 IP 地址映射为 MAC 地址,从而实现了网络层和数据链路层之间的通信。ARP 协议的地位如同一个翻译官,负责将网络层的 IP 地址翻译成数据链路层的 MAC 地址,使得数据包能够在局域网中正确传输到目标设备。
ARP 协议的作用 ARP 协议的主要作用是解决了 IP 地址到 MAC 地址的映射问题,它通过广播的方式在局域网中查询目标设备的 MAC 地址,从而实现了设备之间的通信。当一个设备需要向另一个设备发送数据时,首先会发送一个 ARP 请求广播 ...