96SEO 2026-02-19 19:59 0
PCB5、进程的状态6、进程的通信方式7、进程的调度算法8、僵尸进程孤儿进程9、死锁

内存管理1、内存碎片2、内存管理3、虚拟内存4、分段机制5、分页机制6、段页式机制7、局部性原理
操作系统本质上是一个运行在计算机上的软件程序是最底层的系统软件。
操作系统的内核Kernel是操作系统的核心部分内核是连接软件和硬件的桥梁决定着系统的性能和稳定性内核功能一般包括进程管理、内存管理、设备管理、文件管理、网络管理等。
设备管理完成设备输入输出设备和外部存储设备等的请求或释放以及设备启动等功能。
网络管理操作系统需要管理计算机网络的配置、连接、通信和安全等以提供高效可靠的网络服务。
安全管理系统用户的身份认证、访问控制、文件加密等以防止非法用户对系统资源的访问和操作。
用户态运行的进程可以直接读取用户程序的数据拥有较低的权限。
当应用程序需要执行某些需要特殊权限的操作例如读写磁盘、网络通信等就需要向操作系统发起系统调用请求进入内核态。
Mode)内核态运行的进程几乎可以访问计算机的任何资源包括系统的内存空间、设备、驱动程序等不受限制拥有非常高的权限。
当操作系统接收到进程的系统调用请求时就会从用户态切换到内核态执行相应的系统调用并将结果返回给进程最后再从内核态切换回用户态。
用户态与内核态的切换需要付出较高的开销需要进行一系列的上下文切换和权限检查应该尽量减少进入内核态的次数以提高系统的性能和稳定性。
要求切换到内核态的一种方式主要是为了使用内核态才能做的事情比如读取磁盘资源。
系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现。
会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序如果先前执行的指令是用户态下的程序那么这个转换的过程自然也就发生了由用户态到内核态的切换。
比如硬盘读写操作完成系统会切换到硬盘读写的中断处理程序中执行后续操作等。
在执行运行在用户态下的程序时发生了某些事先不可知的异常这时会触发由当前运行进程切换到处理此异常的内核相关程序中也就转到了内核态比如缺页异常。
我们运行的用户程序中凡是与系统态级别的资源有关的操作如文件管理、进程控制、内存管理等)都必须通过系统调用方式向操作系统提出服务请求并由操作系统代为完成。
设备管理完成设备输入输出设备和外部存储设备等的请求或释放以及设备启动等功能。
文件管理完成文件的读、写、创建及删除等功能。
进程管理进程的创建、撤销、阻塞、唤醒进程间的通信等功能。
内存管理完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。
系统调用和普通库函数调用非常相似只是系统调用由操作系统内核提供运行于内核态而普通的库函数调用由函数库或用户自己提供运行于用户态。
用户态的程序发起系统调用因为系统调用中涉及一些特权指令只能由操作系统内核态执行的指令用户态程序权限不足因此会中断执行也就是
执行的程序会中断跳转到中断处理程序。
内核程序开始执行也就是开始处理系统调用。
内核处理完成后主动触发
在用户态和内核态切换时需要先保存现场即保存用户态的寄存器等然后去执行系统调用最后恢复现场。
是指计算机中正在运行的一个程序实例。
举例你打开的微信就是一个进程。
也被称为轻量级进程更加轻量。
多个线程可以在同一个进程中同时执行并且共享进程的资源比如内存空间、文件句柄、网络连接等。
举例你打开的微信里就有一个线程专门用来拉取别人发你的最新的消息。
从上图可以看出一个进程中可以有多个线程多个线程共享进程的堆和方法区
之后的元空间)资源但是每个线程有自己的程序计数器、虚拟机栈和本地方法栈。
进程是资源分配的基本单位线程是处理机调度执行的基本单位进程有独立的地址空间和程序代码等资源切换开销较大线程共享同一进程的地址空间和程序代码等资源切换开销小进程虚拟地址空间切换后导致页表也要切换进而导致Cache失效命中率降低虚拟地址转换为物理地址就会变慢而线程无需切换地址空间进程可以包含多个线程但是一个线程只能属于一个进程
进程切换是一个开销很大的操作线程切换的成本较低。
线程更轻量一个进程可以创建多个线程。
多个线程可以并发处理不同的任务更有效地利用了多处理器和多核计算机。
而进程只能在一个时间干一件事如果在执行过程中遇到阻塞问题比如
阻塞就会挂起直到结果返回。
同一进程内的线程共享内存和文件因此它们之间相互通信无须调用内核。
线程同步是两个或多个共享关键资源的线程的并发执行。
应该同步线程以避免关键的资源使用冲突。
互斥锁(Mutex)采用互斥对象机制只有拥有互斥对象的线程才有访问公共资源的权限。
因为互斥对象只有一个所以可以保证公共资源不会被多个线程同时访问。
比如
Lock允许多个线程同时读取共享资源但只有一个线程可以对共享资源进行写操作。
信号量(Semaphore)它允许同一时刻多个线程访问同一资源但是需要控制同一时刻访问此资源的最大线程数量。
屏障Barrier屏障是一种同步原语用于等待多个线程到达某个点再一起继续执行。
当一个线程到达屏障时它会停止执行并等待其他线程到达屏障直到所有线程都到达屏障后它们才会一起继续执行。
比如
:Wait/Notify通过通知操作的方式来保持多线程同步还可以方便的实现多线程优先级的比较操作。
进程控制块是操作系统用来管理和跟踪进程的数据结构每个进程都有一个独立的
进程的描述信息名称、标识符等进程的调度信息包括进程的状态优先级阻塞原因等进程对资源的需求情况包括CPU时间内存空间IO设备等进程打开的文件信息包括文件描述符、文件类型、打开模式等处理机的状态信息由处理机的各种寄存器中的内容组成的包括通用寄存器、指令计数器、程序状态字
就绪状态(ready)进程已处于准备运行状态即进程获得了除了处理器之外的一切所需资源一旦得到处理器资源(处理器分配的时间片)即可运行。
阻塞状态(waiting)又称为等待状态进程正在等待某一事件而暂停运行如等待某资源为可用或等待
结束状态(terminated)进程正在从系统中消失。
可能是进程正常结束或其他原因中断退出运行。
1、管道/匿名管道(Pipes)用于具有亲缘关系的父子进程间或者兄弟进程之间的通信。
匿名管道由于没有名字只能用于亲缘关系的进程间通信。
为了克服这个缺点提出了有名管道。
有名管道严格遵循
3、信号(Signal)信号是一种比较复杂的通信方式用于通知接收进程某个事件已经发生
Queuing)消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识。
管道和消息队列的通信数据都是先进先出的原则。
消息队列克服了信号承载信息量少管道只能承载无格式字节流以及缓冲区大小受限等缺点
5、信号量(Semaphores)信号量是一个计数器用于多进程对共享数据的访问信号量的意图在于进程间同步。
这种通信方式主要用于解决与同步相关的问题并避免竞争条件。
memory)使得多个进程可以访问同一块内存空间不同进程可以及时看到对方进程中对共享内存中数据的更新。
这种方式需要依靠某种同步操作如互斥锁和信号量等。
可以说这是最有用的进程间通信方式。
此方法主要用于在客户端和服务器之间通过网络进行通信。
套接字是支持
的网络通信的基本操作单元可以看做是不同主机之间的进程进行双向通信的端点简单的说就是通信的两方的一种约定用套接字中的相关函数来完成通信过程。
从就绪队列中选择一个最先进入该队列的进程为之分配资源使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用
从就绪队列中选出一个估计运行时间最短的进程为之分配资源使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用
时间片轮转调度是一种最古老最简单最公平且使用最广的算法。
每个进程被分配一个时间段称作它的时间片即该进程允许运行的时间。
Queue前面介绍的几种进程调度的算法都有一定的局限性。
如短进程优先的调度算法仅照顾了短进程而忽略了长进程
。
多级反馈队列调度算法既能使高优先级的作业得到响应又能使短作业进程迅速完成。
因而它是目前被公认的一种较好的进程调度算法UNIX
优先级调度算法Priority为每个进程分配优先级首先执行具有最高优先级的进程依此类推。
具有相同优先级的进程以
方式执行。
可以根据内存要求时间要求或任何其他资源要求来确定优先级。
fork()系统调用创建的该调用会创建一个新的进程该进程是原有进程的一个副本。
子进程和父进程的运行是相互独立的它们各自拥有自己的
exit()系统调用结束自己的生命时内核会释放该进程的所有资源包括打开的文件、占用的内存等但是该进程对应的
waitpid()系统调用时才会被释放以便让父进程得到子进程的状态信息。
waitpid()等系统调用来获取子进程的状态信息释放子进程占用的资源导致子进程的
依然存在于系统中但无法被进一步使用。
这种情况下子进程被称为“僵尸进程”。
避免僵尸进程的产生父进程需要及时调用
孤儿进程一个进程的父进程已经终止或者不存在但是该进程仍在运行。
这种情况下该进程就是孤儿进程。
孤儿进程通常是由于父进程意外终止或未及时调用
waitpid()等系统调用来回收子进程导致的。
为了避免孤儿进程占用系统资源操作系统会将孤儿进程的父进程设置为
DeadLock多个进程/线程同时被阻塞其中的一个或者全部都在等待某个资源被释放由于被无限期阻塞导致程序不能正常终止。
互斥资源必须为互斥模式即一次只有一个进程可以使用。
如果另一进程申请该资源那么必须等待直到该资源被释放为止占有并等待一个进程至少应该占有一个资源
并等待另一个资源而该资源被其他进程所占有不可抢占资源不能被抢占只能在持有资源的进程完成任务后该资源才会被释放循环等待有一组等待的进程{P0、P1、、、Pn}P0等待的资源被P1占有P1等待的资源被P2占有Pn等待的资源被P0占有。
{System.out.println(Thread.currentThread().getName()
{Thread.sleep(1000);System.out.println(Thread.currentThread().getName()
{System.out.println(Thread.currentThread().getName()
{System.out.println(Thread.currentThread().getName()
{Thread.sleep(1000);System.out.println(Thread.currentThread().getName()
{System.out.println(Thread.currentThread().getName()
破坏互斥条件是最简单的方法但是很多资源往往必须是互斥的破环占有并等待通过静态分配策略在进程执行之前就申请到他所需要的全部资源并且需要其所有的资源都得到满足之后才开始执行不会出现占有某个资源并等待另一个资源的情况会导致资源利用率下降。
破坏不可抢占采用剥夺式调度算法只适合主存资源和CPU资源的分配并不适用与所有资源会导致资源利用率下降。
破坏循环等待条件通过层次分配策略所有的资源都被分成了多个层次一个进程得到某一次的一个资源后它只能再申请较高一层的资源当一个进程要释放某层的一个资源时必须先释放所占用的较高层的资源按这种策略是不可能出现循环等待链的因为那样的话就出现了已经申请了较高层的资源反而去申请了较低层的资源不符合层次分配策略也降低了资源利用率
判断分配后系统是否处于安全状态若不安全则试探分配作废让该进程继续等待若能够进入到安全的状态则就
通过进程资源分配图是描述了进程和资源申请及分配关系的一种有向图用于检测系统是否处于死锁状态。
当死锁检测程序检测到存在死锁发生时应设法让其解除让系统从死锁状态中恢复过来常用的解除死锁的方法有以下四种
立即结束所有进程的执行重新启动操作系统这种方法简单但以前所在的工作全部作废损失很大。
撤销涉及死锁的所有进程解除死锁后继续运行这种方法能彻底打破死锁的循环等待条件但将付出很大代价例如有些进程可能已经计算了行时还要再次进行计算。
抢占资源从涉及死锁的一个或几个进程中抢占资源把夺得的资源再分配给涉及死锁的进程直至死锁解除。
内存管理包含了内存的分配与回收、地址转换、内存扩充、内存映射、内存优化、内存安全等
Fragmentation简称为内部碎片)已经分配给进程使用但未被使用的内存。
Fragmentation简称为外部碎片)部内存碎片指的是那些并未分配给进程但又不能使用的内存。
连续内存管理为一个用户程序分配一个连续的内存空间内存利用率一般不高。
非连续内存管理允许一个程序使用的内存分布在离散或者说不相邻的内存中相对更加灵活一些。
是计算机系统内存管理非常重要的一个技术本质上来说它只是逻辑存在的是一个假想出来的内存空间主要作用是作为进程访问主存物理内存的桥梁并简化内存管理。
隔离进程进程之间彼此隔离每个进程对应各自独立的虚拟地址空间对于进程来说都认为自己拥有了独立的物理内存提供了系统的安全性提升物理内存利用率通过虚拟地址空间操作系统只需要将进程当前正在使用的部分数据或指令加载到物理内存简化内存管理程序员不用和物理内存打交道而是通过虚拟地址空间访问物理内存从而简化了内存管理多个进程共享物理内存进程在运行过程中会加载许多操作系统的动态库这些库对于每个进程来说都是公用的在内存中实际只会加载一份这部分称之为共享内存提供更大的内存空间可以让程序拥有超过系统物理内存大小的可用内存空间当物理内存不够用时利用磁盘充当将物理内存页通常为4KB保存到磁盘文件可以根据需要在物理内存与磁盘之间移动
的物理内存)的形式管理/分配物理内存。
应用程序的虚拟地址空间被分为大小不等的段段是有实际意义的每个段定义了一组逻辑信息例如有主程序段
段号标识着该虚拟地址属于整个虚拟地址空间中的哪一个段。
段内偏移量相对于该段起始地址的偏移量。
首先解析得到虚拟地址中的段号通过段号去该应用程序的段表中取出对应的段信息找到对应的段表项从段信息中取出该段的起始地址物理地址加上虚拟地址中的段内偏移量得到最终的物理地址。
分段机制容易出现外部内存碎片即在段与段之间留下碎片空间(不足以映射给虚拟地址空间中的段)。
从而造成物理内存资源利用率的降低。
把主存物理内存分为连续等长的物理页应用程序的虚拟地址空间划也被分为连续等长的虚拟页。
现代操作系统广泛采用分页机制。
页是连续等长的不同于分段机制下不同长度的段。
在分页机制下应用程序虚拟地址空间中的任意虚拟页可以被映射到物理内存中的任意物理页上因此可以实现物理内存资源的离散分配。
分页机制按照固定页大小分配物理内存使得物理内存资源易于管理可有效避免分段机制中外部内存碎片的问题。
页号通过虚拟页号可以从页表中取出对应的物理页号页内偏移量物理页起始地址
首先解析得到虚拟地址中的虚拟页号通过虚拟页号去该应用程序的页表中取出对应的物理页号找到对应的页表项用该物理页号对应的物理页起始地址物理地址加上虚拟地址中的页内偏移量得到最终的物理地址。
多级页表属于时间换空间的典型场景利用增加页表查询的次数减少页表占用的空间。
最佳页面置换算法OPTOptimal优先选择淘汰的页面是以后永不使用的或者是在最长时间内不再被访问的页面这样可以保证获得最低的缺页率。
但由于人们目前无法预知进程在内存下的若干页面中哪个是未来最长时间内不再被访问的因而该算法无法实现只是理论最优的页面置换算法可以作为衡量其他置换算法优劣的标准。
最简单的一种页面置换算法总是淘汰最先进入内存的页面即选择在内存中驻留时间最久的页面进行淘汰。
该算法易于实现和理解一般只需要通过一个
算法赋予每个页面一个访问字段用来记录一个页面自上次被访问以来所经历的时间
算法比较像不过该置换算法选择的是之前一段时间内使用最少的页面作为淘汰页。
时钟页面置换算法Clock可以认为是一种最近未使用算法即逐出的页面都是最近没有使用的那个。
结合了段式管理和页式管理的一种内存管理机制把物理内存先分成若干段每个段又继续分成若干大小相等的页。
局部性原理是指在程序执行过程中数据和指令的访问存在一定的空间和时间上的局部性特点。
时间局部性是指一个数据项或指令在一段时间内被反复使用的特点空间局部性是指一个数据项或指令在一段时间内与其相邻的数据项或指令被反复使用的特点。
节点号相同两者对文件系统来说是完全平等的可以看作是互为硬链接源头是同一份文件删除其中任何一个对另外一个没有影响可以通过给文件设置硬链接文件来防止重要文件被误删。
也就是一个文件的备份
节点号不同而是指向一个文件路径。
源文件删除后软链接依然存在但是指向的是一个无效的文件路径。
也就是Windows下的快捷方式
机械硬盘的一次磁盘读写操作的时间由磁盘寻道/寻找时间、延迟时间和传输时间决定。
磁盘调度算法可以通过改变到达磁盘请求的处理顺序减少磁盘寻道时间和延迟时间。
First-ServedFCFS按照请求到达磁盘调度器的顺序进行处理先到达的请求的先被服务。
FCFS
算法实现起来比较简单不存在算法开销。
不过由于没有考虑磁头移动的路径和方向平均寻道时间较长。
同时该算法容易出现饥饿问题即一些后到的磁盘请求可能需要等待很长时间才能得到服务。
FirstSSTF算法优先选择距离当前磁头位置最近的请求进行服务。
SSTF
算法能够最小化磁头的寻道时间但容易出现饥饿问题即磁头附近的请求不断被服务远离磁头的请求长时间得不到响应。
实际应用中需要优化一下该算法的实现避免出现饥饿问题。
3、扫描算法SCAN也被称为电梯Elevator算法基本思想和电梯非常类似。
磁头沿着一个方向扫描磁盘如果经过的磁道有请求就处理直到到达磁盘的边界然后改变移动方向依此往复。
SCAN
算法能够保证所有的请求得到服务解决了饥饿问题。
但是如果磁头从一个方向刚扫描完请求才到的话。
这个请求就需要等到磁头从相反方向过来之后才能得到处理。
算法的变体只在磁盘的一侧进行扫描并且只按照一个方向扫描直到到达磁盘边界然后回到磁盘起点重新开始循环。
算法中磁头到了磁盘的边界才改变移动方向这样可能会做很多无用功因为磁头移动方向上可能已经没有请求需要处理了。
LOOK
算法进行了改进如果磁头移动方向上已经没有别的请求就可以立即改变磁头移动方向依此往复。
也就是边扫描边观察指定方向上还有无请求因此叫
只有到达磁盘边界时才能改变磁头移动方向并且磁头返回时也需要返回到磁盘起点这样可能会做很多无用功。
C-LOOK
算法进行了改进如果磁头移动的方向上已经没有磁道访问请求了就可以立即让磁头返回并且磁头只需要返回到有磁道访问请求的位置即可。
固态硬盘没有扇区、磁道等这些概念是通过闪存颗粒的特性FTL:闪存转换层算法内部维护了一张映射表记录了逻辑到物理的映射。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback