王道操作系统笔记-进程(16)– 避免死锁 银行家算法和安全序列
王道操作系统笔记-进程(15)– 预防死锁 破坏互斥条件 只有对必须互斥使用的资源的争抢才会导致死锁。 如果把只能互斥使用的资源改造为允许共享使用,则系统不会进入死锁状态。比如: SPOOLing技术。操作系统可以采用SPOOLing技术把独占设备在逻辑上改造成共享设备。比如,用SPOOLing技术将打印机改造为共享设备… 缺点:并不是所有的资源都可以被改造成可共享使用的资...
王道操作系统笔记-进程(14)– 死锁 死锁、饥饿、死循环的区别 死锁:各进程互相等待对方手里的资源,导致多个进程都阻塞,无法向前推进的现象。 饥饿:由于长期得不到想要的资源,导致某个进程无法向前推进的现象。比如:在短进程优先(SPF)算法中,若有源源不断的短进程到来,则长进程将一直得不到处理机,从而发生长进程“饥饿”。 死循环:某进程执行过程中一直跳不出某个循环的现...
C++内存管理 - 12~13 此笔记需要等待更新和确认。 Per-class allocator - 自己的内存池(1) new char[chunk]是因为char是1个字节。举例,char[100]就是100字节。所以char[chunk]就是分配了对应大小的内存 实现过程 预申请一个内存区chunk,将内存中按照对象大小划分成多个内存块block。 维持一个空...
C++内存管理 - 9~11 此笔记需要等待更新和确认。 重载 operator new, operator delete 注意红色的是较为常见的重载成员函数中的operator new。绿色的是不常见的重载全局函数的operator new 重载全局operator new, operator delete 一定要注意,全局的::operator new下面是mal...
C++内存管理 - 7~8 此笔记需要等待更新和确认。 array new 和 array delete 用new和delete对数组进行操作时,会调用对应长度的次数的构造/析构函数 并分配/释放对应大小的内存。 Complex* pca = new Complex[3]; //这里会调用三次构造函数 delete[] pca; //这里会调用三次析构函数。三次会指向不同的对象 ...
C++内存管理 - 1~6 此笔记需要等待更新和确认。最好搭配深度探索6.1一起看 我们由上图可以看出malloc和free是比new delete更底层的东西。malloc和free属于c函数,而new和delete属于c++表达式。 内存分配方式: 使用malloc分配特定大小的内存。使用malloc会返回一个未定类型的指针。 类型决定了...
Linux多进程开发-2.15-有名管道 有名管道 有名管道以FIFO的文件形式存在于文件系统中。但是内容是在内存中。 创建有名管道 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <stdlib.h> #include <un...
Linux多进程开发-2.12-父子进程通过匿名管道通信 一次性写入 #include <unistd.h> #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ int...
王道操作系统笔记-进程(13)– 用信号量实现进程互斥、同步、前驱关系 信号量 为了方便理解,我们可以认为 信号量的值 = 这种资源的剩余数量 所以如果信号量的值小于0,说明此时有进程正在等待这个资源。 P(S) 也就是wait(S) —— 申请一个资源S。如果资源不够就阻塞等待。 V(S) 也就是signal(S) —— 释放一个资源S。如果有进程在等待该资源,则唤醒一个进...