
OS
根号二点五
胜天半子
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【单例模式下懒汉、饿汉模式】分析与实现
在讲单例模式之前,先说一下设计模式设计模式一些人将自己的编程经验,通过一些常见的问题或者常见的场景,给出一种解决方案或者一种套路,让后续的程序员在遇到相似问题时可以快速设计自己的代码,即一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结常见设计模式创建性模式:用于构建对象,将实现从系统当中分离处理 单例模式结构性模式:用于许多不同对象之间形成大型的对象结构 适配器模式...原创 2020-03-12 15:22:10 · 225 阅读 · 0 评论 -
死锁 原因、必要条件及解决方法的分析
定义简单的理解:程序当中有一个执行流没有释放资源,导致其他执行流(线程)无法获取锁的情况即死锁举例来说:死锁是由于两个或以上的线程互相持有对方需要的资源,导致这些线程处于等待状态,无法执行,我们将线程任务定为写字,写字需要的纸和笔为当前进程所需要获取的资源,线程 A 获得了纸,线程 B 获得了笔,但线程 A 依旧申请笔资源,线程 B 申请纸资源,纸笔都被锁死,即全部阻塞,这种情况就是死锁必要...原创 2020-02-25 00:05:10 · 1516 阅读 · 0 评论 -
线程 概念、特性及常见问题分析
线程概念线程在 Linux 操作系统中就是一个执行流,不同的执行流可以拥有不同的 CPU 来进行运算,即不同的的执行流之间可能会有并行的情况产生,这种并发的场景下,不同执行流访问资源可能会导致程序异常,这种情况为线程安全创建一个线程,也是在内核当中创建出来一个 PCB,但是这个 PCB 当中的内存指针,是指向进程的虚拟地址空间问题:都指向了同一个虚拟地址空间,这个和 vfork 创建子进程有...原创 2020-02-21 16:32:53 · 522 阅读 · 0 评论 -
谈谈 volatile
什么是 volatilevolatile (易变型变量)是一个类型修饰符volatile 的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值volatile 的作用volatile 的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值,简单地说就是防止编译器对代码进行优化用它声明的类型变量表示变量本身可以被某些编译器未知的因素更改,比...原创 2020-02-20 23:13:26 · 305 阅读 · 0 评论 -
竞态条件 一二事
竞态条件如果程序运行顺序的改变会影响最终结果,这种情况即竞态条件,即程序的不同执行流,执行顺序的不同,导致程序运行结果不同导致竞态条件发生的代码区称作临界区。在临界区中使用适当的同步就可以避免竞态条件关于临界区、临界资源的分析可见另一篇博客重入先看一下下面的实例:有两个PCB(p1,p2)分别要对一个全局变量 val = 10 进行 – 的操作,正常情况下结果应该是 8 ,但在临界资源...原创 2020-02-20 18:00:28 · 232 阅读 · 0 评论 -
静态库 & 动态库 实现与区别
静态库(.a)程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库, Windows下(.lib)动态库(.so)程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码, Windows下(.dll)静态库实现生成:ar -rc lib[file...原创 2020-02-15 10:24:10 · 264 阅读 · 0 评论 -
文件描述符 & 文件流指针 区别与联系
文件描述符文件描述符:指的是 fd_array 数组的下标, fd_array 数组中的元素都是一个 sturct file,每一个 struct file 中存储了文件名、创建时间、修改时间、打开时间等信息fd_array 数组中的分配规则:最小未占用原则,即数组下标越小越先分配1.文件流指针是封装文件描述符的,文件流指针底层的 _IO_FILE 结构体当中,保存了文件描述符 _file...原创 2020-02-15 22:39:48 · 1629 阅读 · 0 评论 -
匿名管道 & 命名管道 分析及应用
定义管道是Unix中最古老的进程间通信的形式我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”匿名管道创建无名管道原型int pipe(int fd[2]);参数fd:文件描述符数组,其中fd[0]表示读端, fd[1]表示写端返回值:成功返回0,失败返回错误代码用fork来解释管道共享父进程原有的管道经过 fork 产生的子进程共用管道,读端写端都复制,for...原创 2020-02-16 22:56:35 · 376 阅读 · 0 评论 -
共享内存 system V共享 分析与实现
system V共享共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据共享内存示意图共享内存数据结构struct shmid_ds { struct ipc_perm shm_perm; /* operation perms */ int shm_segs...原创 2020-02-17 15:52:06 · 318 阅读 · 0 评论 -
临界资源的同步与互斥,区分临界资源与临界区,二义性分析
描述互斥:同一时间,当只保证互斥,则可以保证临界资源访问不会造成临界资源数据的二义性,但是有可能占有临界资源的进程一直在占有,导致后面进程访问等待时间比较长同步:保证对临界资源访问的合理性1. 互斥如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入,保证只能有一个进程访问临界资源任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必...原创 2020-02-17 16:22:47 · 3233 阅读 · 0 评论 -
消息队列 分析及运用
消息队列概念消息队列特性为先进先出,底层实现是链表,在内核中创建,有一个消息队列的标识符来表示,这个队列当中的每一个元素都有自己的类型,每一个类型都有一个优先级概念属性消息队列在操作系统属性msgmax:每一个节点最大消息的发送字节数为8 kmsgmnb:队列中所有消息的长度之和 为 16 kmsgmni:系统当中最大的队列数为 2 k图解使用创建 int msgge...原创 2020-02-18 12:53:15 · 395 阅读 · 0 评论 -
信号量实现 同步&互斥 分析
信号量作用实现进程控制,实现进程的同步与互斥本质本质是一个计数器 + PCB等待队列计数器对资源的计数进行加1或减1操作实现互斥同步互斥:不同的进程,在同一时刻,只能有一个进程对临界资源进行访问同步:保证进程对临界资源访问的合理性实例分析互斥的实现是由于计数器初始化时设置为 1,即信号量表示仅 1 个资源可用,仅 1 个进程可访问临界资源现在有进程 A 和 B 对临界资源进行...原创 2020-02-18 13:52:28 · 573 阅读 · 0 评论 -
进程信号的概念、产生及实现(注册、注销、处理、捕捉、阻塞)分析
先思考两个问题:进程创建出的子进程,有可能在子进程退出时产生一个僵尸进程,是由于子进程退出时,父进程来不及回收子进程的退出信息,导致子进程成为僵尸进程,为什么父进程来不及回收子进程的退出信息?从信号角度理解,为什么进程等待就可以解决僵尸进程?信号基本概念信号是进程之间事件异步通知的一种方式,属于软中断,即打断正在运行的进程,使之去处理信号的事件信号种类Linux中有62种信号:1-3...原创 2020-02-19 13:45:43 · 525 阅读 · 0 评论 -
磁盘调度原理及代码实现
内容模拟电梯调度算法,实现对磁盘的调度。原理模拟电梯调度算法,对磁盘调度。磁盘是要供多个进程共享的存储设备,但一个磁盘每个时刻只能为一个进程服务。当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。当有多个进程提出输入输出请求处于等待状态,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。当存取臂仅需移到一个方向最远的所请求的柱面后,如果没有访...原创 2020-01-11 23:58:42 · 1185 阅读 · 0 评论 -
主存储器空间的分配和回收(原理及实现)
内容主存储器空间的分配和回收。目的一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现与主存储器的...原创 2020-01-07 21:50:48 · 7283 阅读 · 2 评论 -
处理器调度算法原理及代码实现
处理器调度算法原理设计一个按优先数调度算法实现处理器调度的程序。(1) 假定系统有五个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为:其中:进程名——作为进程的标识,假设五个进程的进程名分别为P1,P2,P3,P4,P5。指针——按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。要求运行时间——假设进程需要运行的...原创 2019-12-09 17:07:33 · 6427 阅读 · 1 评论 -
银行家算法的原理及代码实现
银行家算法的实现银行家算法原理银行家算法中的数据结构银行家算法安全性算法算法流程图源程序及注释打印的程序运行时初值和运行结果银行家算法原理银行家算法中的数据结构1)可利用资源向量 Available是个含有 m 个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果 Available[j]= K,则表示系统中现有 Rj 类资源 K个2)最大需求矩阵 Max这是一个 n×m 的矩...原创 2019-12-14 23:47:30 · 1658 阅读 · 2 评论