操作系统
文章平均质量分 79
如有错误,还望不吝指正。
马大大~
这个作者很懒,什么都没留下…
展开
-
进程的基本概念
对于进程的定义,有多种不同的说法:传统的进程定义:一个正在执行的程序计算机中正在运行的程序的一个实例可以分配给处理器并由处理器执行的一个实体有若干线程、一个当前状态和一组相关的系统资源所刻画的活动单元这些说法都对,但引入线程后,第四种说法显得更为贴切大多数情况下我们是这样定义的:是程序在给定数据集合上的一次执行过程,是系统进行资源分配和调度运行的独立单位。系统进程:系统进行软硬件资源管理的进程,其相互关系由操作系统负责协调,是系统资源的实际享有者。原创 2023-09-08 20:52:56 · 55 阅读 · 1 评论 -
Linux进程管理
函数调用后父子进程各自继续运行,其先后顺序不确定,并且子进程会复制父进程的data、bss、heap、stack、IO缓冲区,共享父进程的代码段、文件表(子进程有权访问父进程所有的文件描述符,只要把文件描述符告诉他),继承父进程的信号处理方式。如果pgid为0,表示将pid所属的进程加入到其父进程的进程组中,如果该父进程不存在,则将创建一个新的进程组。进程ID在任何时刻都是唯一的,但可以重用,当一个进程结束时,其进程ID就可以被分配其它新创建的进程。函数可以获取一个进程的进程组ID。原创 2023-09-09 11:02:49 · 42 阅读 · 1 评论 -
Linux进程通信
它用于进程间通信的XSI-IPC内核对象,就是像匿名管道、文件内核对象一样,使用XSI方式进行进程间通信时,系统会在内核中创建一个XSI-IPC内核对象,让需要通信的进程共同访问。 在内核中开辟一内存,可以让其它进程的虚拟地址与它进行映射,这样就达到多个进程共享一块内存的目的,当一个进程向这块内存写数据时,其它进程也都可以读取到,这样就达到了通信的目的。 读写:一个进程只负责写入数据,另一个进程只负责读取数据,只要负责读的进程使用的是最新即可,这是单向通信的模式。原创 2023-09-18 23:08:45 · 40 阅读 · 0 评论 -
进程的死锁
采用抢占资源分配策略:进程在运行过程中根据需要逐个提出资源请求,当一个已经占有了某些资源的进程又提出新的资源请求而未得到满足时,则必须释放它已获得全部资源而进入阻塞状态,待以后需要时再重新申请。一次申请完成进程所有需要的资源(把所有资源进行打包,用一把锁来代表,拿到这把锁就等于拿到了所有资源),资源没有满足前不让它运行,一旦开始运行就一直归它所有,但有不足:。由于资源的占用往往是互斥的,因此当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了死锁。原创 2023-09-22 23:28:37 · 171 阅读 · 0 评论 -
Linux线程管理
不会,从表面看,当子线程还在执行而主线程执行到main函数最后一行代码,主线程就会执行main函数中显式或隐式(没写return编译器编译时会自动补上)的return语句,在main函数中执行return语句,就相当于执行exit函数,会导致整个进程一起结束(线程也就全部结束)。可以调用pthread_exit(NULL)让主线程先结束而不是让主线程掉用return结束整个进程,这样子线程就可以继续执行。同步方式(非分离状态):创建线程之后主线程调用pthread_join函数等待其终止,并释放线程资源。原创 2023-09-19 23:08:05 · 97 阅读 · 0 评论 -
线程同步方式
为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起,一般线程睡入条件变量,伴随着解锁动作,而线程从条件变量醒来时,伴随着加锁功能,如果加锁失败线程会进入阻塞状态而不是睡眠。 在多线程编程里面,一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何时刻,最多有一个线程访问,以保证数据的完整性。 所谓的原子操作就是不可被拆分的操作,对于多线程对全局变量进行操作时,就再也不用再线程锁了。 同一进程内的多个线程之间,除了栈内存是独立的,其他资源全部共享。速度快、不会产生死锁。原创 2023-09-20 22:51:41 · 32 阅读 · 0 评论 -
Linux文件系统
在操作系统的内核中定义了一系列内核函数,供应用程序调用,但是为了操作系统的安全,这些函数不能被直接调用,而是向应用程序提供了一系列API,应用程序调用API切换到内核态调用内核函数就是系统调用。 系统调用负责把应用程序的请求传给内核,调用相应的内核函数完成所需的处理,然后将处理结果返回给应用程序。 UNIX/Linux大分部的系统功能是通过系统调用实现的,这些系统调用被封装成了C函数的形式,但它们并不是真正的函数。原创 2023-09-17 23:03:23 · 36 阅读 · 0 评论 -
Linux内存管理
虚拟内存是操作系统内核为了对进程地址空间进行管理( process address space management)而精心设计的一个逻辑意义上的内存空间概念。 在32位系统下,操作系统规定每个进程拥有4G的虚拟内存,但这4G的内存空间并不能直接使用,也就是操作系统给进程画的饼,当进程真的需要使用内存来存储数据时,操作系统会把一部分的虚拟内存与物理内存进行映射,映射后的虚拟内存才能正常使用。原创 2023-09-15 23:23:18 · 48 阅读 · 0 评论 -
存储管理方案
存储管理是对主存(内存)的管理,其中一大任务就是对虚拟内存管理,OS必须提供一种很好的策略来实现内存管理,使CPU尽量处于忙的状态,最大限度的降低内存读写对性能的影响。原创 2023-09-28 14:04:19 · 98 阅读 · 0 评论 -
虚拟存储技术
允许分配给一个进程的页帧在该进程的生命周期中不断地发生变化。 例如有一个由很长的程序和很多的数据组成的进程,在任何一段很短的时间内,执行的程序和访问的数据都很少,在被挂起或换出前只使用一小部分进程块,那么为该进程装入太多的块就造成了很大的浪费。 为页面设置访问计数器,页面每访问一次,对应的计数器加1.淘汰页面时,选择访问计数器的值最小的页面淘汰,同时将所有的计数器清零。 对于固定分配策略,一旦在进程的执行过程中发生缺页,必然发生页面替换,且淘汰的必然是该进程本身的一个在主存中的页面。原创 2023-09-28 17:20:58 · 100 阅读 · 0 评论 -
磁盘调度策略
磁盘共400磁道,若磁头的当前位置为100,磁头正向磁道号增加方向移动,现有一磁盘读写请求队列,23,376,205,132,19,61,190,398,29,4,18,40。有访问请求时,向一个方向扫描并处理请求,在移动方向上没有磁盘请求时,立刻返回到最小磁道号,以减少等待时间。它的优点是简单易实现,但可能导致长的寻道等待时间,因为它无法考虑请求的物理位置。 没有访问请求时,磁头不动,有访问时磁头来回扫描,每次选择磁头移动方向上最近的访问请求,若移动方向上没有请求了,则改变方向,向反方向扫描。原创 2023-09-28 21:45:42 · 217 阅读 · 0 评论 -
Linux信号管理
信号是UNIX、类UNIX以及其他POSIX兼容的操作系统中,进程间通讯的一种有限制的方式。它是一种异步的通知机制,用来提醒进程一个事件已经发生。 当一个信号发送给一个进程,操作系统中断了进程正常的执行、控制流程,此时,任何非原子操作都将被中断。如果进程定义了信号的处理函数,那么它将被执行,否则就执行默认动作。# 执行kill -l命令可以显示出当前系统可能产生的所有信号 一种专门存储信号的数据类型sigset_t,有128个字节,每个字节代表一个信号。原创 2023-09-18 11:40:34 · 57 阅读 · 0 评论 -
Linux环境变量
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置、系统文件夹位置等。 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如操作系统中的path环境变量【配过Windows环境变量对path应该很熟悉了】,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行程序。原创 2023-09-14 22:41:13 · 33 阅读 · 0 评论 -
Linux库文件
库文件是计算机上的一类文件,提供给使用者一些开箱即用的全局变量、函数、结构、联合、枚举或类,它是若干个目标文件的集合,也可以对源码进行保密。库文件分为静态库和动态库,静态库和动态库的区别体现在程序的链接阶段和执行阶段。 当一个模块不会再发生改变,并且执行速度有一些要求,适合把它封装成静态库。 随着计算机性能的不断提升,弥补了动态库运行速度慢的缺点,再加上它能节约内存、更新方便,最主要的是计算机硬件一直在升级,所以就导致大多数代码需要不断的升级,因此我们大多数情况下把模块封装成动态库。。原创 2023-09-14 23:38:27 · 35 阅读 · 0 评论 -
处理器管理基本概念
又称作业调度或宏观调度,即按一定的调度算法把外存上处于后备作业队列中的作业调入内存,为它们分配所需的资源并创建进程,然后将新创建的进程插入到系统的就绪队列中。又称交换调度,功能是在内存使用紧张的情况下,将内存中暂时无法运行的进程挂起,即由内存调至外存(换出),使外存上具备运行条件的就绪进程能够及时进入内存运行。在抢占方式下,可以通过剥夺处理器所有权的方式,暂停当前进程的运行,满足更紧急进程的处理要求。又称进程调度或微观调度,功能是按照一定的调度算法将CPU分派给就绪队列中的某个进程。原创 2023-09-12 23:59:01 · 121 阅读 · 0 评论 -
处理器调度算法
当运行进程因某种原因(如超时或等待I/O)需要放弃CPU时,进程调度程序将进行进程的CPU现场信息,保存到该进程PCB的CPU状态保护区。将选中进程保存在PCB的CPU现场信息送入CPU的各寄存器,然后将CPU的使用权交给选中的进程,使它从上次中断运行的断点处恢复正常运行。只有当优先级高的就绪队列中的所有进程全部运行完毕或等待I/O操作而没有进程运行时,才把处理机分配给低优先级就绪队列中的进程。s不变,w越大R越大—>长进程等待足够长的时间后,R值足够大,可以越过短进程运行,所以也就不会被饿死了。原创 2023-09-13 23:23:21 · 411 阅读 · 0 评论