操作系统
弟炜啊
这个作者很懒,什么都没留下…
展开
-
进程隔离相关
进程隔离是操作系统内核对于资源管理和安全增强的特性,其最终的目的是对于操作系统内核能够更好的控制程序对资源的申请和使用,并且控制此程序可访问资源的范围并限定此程序异常之后能够影响的范围。进程隔离对硬件有一些基本的要求,其中最主要的硬件是MMU (Memory Management Unit 内存管理单元),MMU的作用简单用一句话概括就是将线性地址(虚拟地址)翻译为物理地址为什么需要线性地址(虚拟地址) 到 物理地址的翻译如果没有线性地址的概念只有物理地址会出现的问题:整个操作系统能够访问.原创 2021-09-24 21:28:07 · 173 阅读 · 0 评论 -
进程调度的方法
所谓进程调度方式,就是指当某个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,此时应该如何分配处理及。两种进程调度方式非剥夺调度方式又称非抢占方式。非剥夺调度方式是指当一个进程正在处理机上执行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程完成或发生某种事件而进入阻塞态时,才把处理机分配给更为重要或紧迫的进程。在非剥夺调度方式下,一旦把CPU分配给一个进程,该进程就会保持CPU直到终止或转换到等待态优原创 2021-09-24 21:20:33 · 629 阅读 · 0 评论 -
缺页中断相关
缺页中断就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。操作当一个进程发生缺页中断的时候,进程会陷入内核态,执行以下操作:检查要访问的虚拟地址是否合法 查找/分配一个物理页 填充物理页内容(读取磁盘,或者直接置0,或者啥也不干) 建立映射关系(虚拟地址到物理地址)重新执行发生缺页中断的那条指令...原创 2021-09-22 18:41:59 · 182 阅读 · 0 评论 -
fork函数
fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。fork函数的特性fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:在父进程中,fork返回新创建子进程的进程I原创 2021-09-22 15:53:54 · 1130 阅读 · 0 评论 -
IO多路复用
I/O多路复用 (单个线程,通过记录跟踪每个I/O流(sock)的状态,来同时管理多个I/O流IO多路复用模型是建立在内核提供的多路分离函数select基础之上的,使用select函数可以避免同步非阻塞IO模型中轮询等待的问题。select, poll, epoll 都是I/O多路复用的具体的实现select用户首先将需要进行IO操作的socket添加到select中,然后阻塞等待select系统调用返回。当数据到达时,socket被激活,select函数返回。用户线程正式发起rea原创 2021-09-22 13:23:38 · 418 阅读 · 0 评论 -
虚拟内存到物理内存怎么映射
程序在编译时不可能知道装载后的物理内存地址,实际上,程序编译生成的地址都是虚拟地址。在我们日常使用的 Linux 或者 Windows 操作系统下,程序并不能直接访问物理内存。为了解决这个问题,当程序装载后,会通过虚拟地址映射到真实的物理地址。内存被分成固定大小的页(Page),然后再通过虚拟内存地址(Virtual Address)到物理内存地址(Physical Address)的地址转换(Address Translation),才能访问实际存放数据的物理内存位置。页表(Page Tabl..原创 2021-09-16 13:36:01 · 1757 阅读 · 2 评论 -
系统怎么把可执行文件装入内存
通常,程序以二进制执行文件的形式座落于磁盘上,比方说a.out或是prog.exe。为了在CPU上运行,程序必须先被带入内存,然后放入一个进程的上下文中。接下来我们会描述这一过程中的步骤,从编译程序到放入内存中。如下图所示:源文件被编译成目标文件,这些目标文件旨在装入任何物理内存中,这种格式称为可重定位目标文件relocatable object file。接下来,链接器linker将这些可重定位的目标文件组合为单个二进制可执行executable文件。在链接阶段,也可能包括其他目标文件或库,例原创 2021-09-16 13:36:09 · 800 阅读 · 0 评论 -
进程调度的方法
先来先服务一种简单的调度算法,适用于作业和进程调度。先来先服务算法按照进程/作业到达先后顺序来进行调度。当作业调度采用该算法时,每次调度都会从后备队列中取出最先到达的作业,为他分配内存,创建PCB,放入就绪队列中;当进程调度采用该算法时,每次调度都会从就绪队列中取出最先进入该队列的进程,给他分配处理机(处理机=CPU+主存储器+IO设备)。短作业优先作业或进程的长短是以作业或进程要求运行时间的长短来衡量的。优先级调度作业或进程的优先级来确定优先调度权。静态优先级 --- 优先级.原创 2021-09-24 21:21:27 · 203 阅读 · 0 评论 -
常用锁相关
互斥锁互斥锁用于控制多线程对他们之间共享资源互斥访问的一个信号量。也就是说为了避免多个线程在某一时刻同时操作一个共享资源。例如线程池中的多个空闲线程和一个任务队列。任何时刻一个线程都要使用互斥锁互斥访问任务队列,以避免多个线程同时访问任务队列以发生错乱。在某一时刻,只有一个线程可以获取互斥锁,在释放互斥锁之前其他线程都不能获取该互斥锁。如果其他线程想要获取这个互斥锁,那么这个线程只能以阻塞方式进行等待条件锁条件锁就是所谓的条件变量,某一线程因为某个条件为满足时,可以使用条件变量使该程序处于原创 2021-09-16 13:36:30 · 40 阅读 · 0 评论 -
二叉平衡树
特点非叶子节点最多拥有两个子节点; 非叶子节值大于左边子节点、小于右边子节点; 树的左右两边的层级数相差不会大于1; 没有值相等重复的节点。插入节点操作平均时间复杂度 O(log(n)) ...原创 2021-09-15 18:32:30 · 68 阅读 · 0 评论 -
进程间通信方式
进程通信:每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。匿名管道通信匿名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。// 需要的头文件#include <unistd.h>// 通过原创 2021-09-15 17:42:40 · 164 阅读 · 0 评论 -
协程相关知识点
子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。子程序调用总是一个入口,一次返回,调用顺序是明确的。协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。协程的优势协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优原创 2021-09-13 22:32:50 · 123 阅读 · 0 评论 -
线程相关知识点
多线程同步互斥锁多个线程均可以访问到一个互斥量,通过对互斥量加锁,从而来保护一个临界区,防止其它线程同时进入临界区,保护临界资源互斥访问。条件变量条件变量适合多个线程等待同一事件发生,然后去干某事。生产者和消费者模型:多个消费者去等待生产者生产物品,消费者去消耗物品。当生产者生产出来一件物品时,便可以通知所有的消费者(当然也可以只通知其中一个等待的消费者)---可以去消耗物品了。这时多个消费者便去争抢物品,谁快谁拿到物品消耗。当物品被消耗完时,消费者就等待生产者。就类似于这样的场原创 2021-09-11 13:02:54 · 40 阅读 · 0 评论 -
进程相关知识点
进程间通信共享内存两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。共享内存为什么快对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据。四次拷贝:1. 由用户空间的buf中将数据拷贝到内核中。2. 内核将数据拷贝到内存中。3. 内存到内核。4. 内核到用户空间的b.原创 2021-09-11 13:02:33 · 61 阅读 · 0 评论 -
内存管理相关知识
内存管理的功能内存空间的分配与回收:由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率。 地址转换:在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供地址变换功能,把逻辑地址转换成相应的物理地址。 内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。 存储保护:保证各道作业在各自的存储空间内运行,互不干扰逻辑地址,物理地址,虚拟地址逻辑地址(相对地址):编译后,每个目标模块都从0号单元开始编址。当链接程序将各个模块原创 2021-09-10 19:40:17 · 53 阅读 · 0 评论 -
线程和进程的区别
调度:线程是独立调度的基本单位,进程是拥有资源的基本单位。同一个进程中,线程切换不会引起进程切换。在不同进程中进行线程切换,会引起进程切换。 拥有资源:进程是拥有资源的基本单位。线程可以访问其隶属进程的系统资源。 系统开销:创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等,因此操作系统所付出的开销远大于创建或撤销线程时的开销。类似的,在进行进程切换时,涉及当前执行进程CPU环境的保存及新调度到进程CPU环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。此外,由于同一进原创 2021-09-10 19:20:29 · 48 阅读 · 0 评论