操作系统
Wzning0421
I'm always learning.
展开
-
生产者消费者问题
生产者消费者问题是面试常见的题,如何用两个线程实现对于一个队列的生产者消费者模型呢?//这是生产者消费者模型的代码 #include<iostream>...原创 2020-04-14 00:01:26 · 276 阅读 · 0 评论 -
双线程交替修改变量 条件变量
这里用到了条件变量。对于条件变量,它的作用是可以调度各个进程阻塞或者唤醒。每个条件变量都有两个操作:wait和signal。wait操作可以把自身进程放于等待队列中,并且紧急等待队列非空的情况下可以唤醒第一个等待者。signal可以唤醒等待队列进程中的第一个等待者,然后本进程进入紧急等待队列的末尾。#include<stdio.h>#include<unistd.h>...原创 2020-04-02 13:01:54 · 356 阅读 · 0 评论 -
Linux和windows下多线程的区别
Linux和windows对于多线程的多线程的实现是不同的。总体来说,Linux系统下,是用户级的多线程,也就是说内核是并不清楚多线程的存在的;而windows下则是核心级别的线程,内核可以直接对于线程进行管理。 具体来说,Linux只是用一个叫做“运行时系统”完成对于多线程的管控。Linux没有一个直接对于多线程可以管理的数据结构,他只能对于多线程上一层的进程,...原创 2020-02-26 22:48:27 · 3520 阅读 · 0 评论 -
哲学家就餐问题
哲学家就餐问题是一个典型的多线程死锁问题。有五个哲学家一起思考和吃饭,他们五个人围着一个圆桌坐着,每个人左边和右边都放着一只筷子(每只筷子也可以看成被左右两个哲学家所共享),如下图所示:每个哲学家先思考,饿了之后要吃饭。约定:每个哲学家必须拿到左右两只筷子才能吃饭;每个哲学家拿到了筷子,除非吃完饭,否则不会放弃手中的筷子。首先我们来看一个基础的想法:因为是五位哲学家,...原创 2019-10-14 22:49:35 · 1362 阅读 · 0 评论 -
死锁避免算法--银行家算法
银行家算法算法思想银行家算法:银行家算法是从当前状态出发,按照系统各类资源剩余量逐个检查各进程需要申请的资源量,找到一个各类资源申请量均小于等于系统剩余资源量的进程P1。然后分配给该P1进程所请求的资源,假定P1完成工作后归还其占有的所有资源,更新系统剩余资源状态并且移除进程列表中的P1,进而检查下一个能完成工作的客户,......。如果所有客户都能完成工作,则找到一个安全序列,银行家才是...原创 2019-10-14 20:00:03 · 565 阅读 · 0 评论 -
I/O: 阻塞非阻塞I/O 同步异步I/O
我们知道,在Linux(UNIX)操作系统中,共有五种IO模型,分别是:阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动IO模型以及异步IO模型。同步IO模型阻塞IO模型我们钓鱼的时候,有一种方式比较惬意,比较轻松,那就是我们坐在鱼竿面前,这个过程中我们什么也不做,双手一直把着鱼竿,就静静的等着鱼儿咬钩。一旦手上感受到鱼的力道,就把鱼钓起来放入鱼篓中。然后再钓下一条鱼。映射到L...原创 2019-10-09 22:57:57 · 210 阅读 · 0 评论 -
PETERSON互斥算法解析
对于互斥算法,主要有两种,一种是DEKKER算法,另一种是PETERSON算法,这一篇主要来说PETERSON算法。相比于DEKKER算法,PETERSON算法也解决了互斥访问问题,并且不需要像DEKKER算法一样强制轮流访问,可以正常的顺序进行工作,它的原理如下://进程ienter_region(i);//这个函数用于判断和决定进程i什么时候能进入临界区临界区leave_reg...原创 2019-09-19 10:34:35 · 3932 阅读 · 3 评论 -
Dekker互斥算法解析
引入Dekker互斥算法解决的是多进程访问一个临界区的保护问题和“after you”问题。我们首先来看,两个进程访问一段临界区的互斥问题://P进程如下:pturn = true;while(qturn);//临界区的资源pturn = false;//q进程如下:qturn = true;while(pturn);//临界区的资源qturn = fals...原创 2019-09-18 23:06:29 · 1584 阅读 · 0 评论 -
缓存淘汰算法 LRU
LRU(least recent used)算法,指的是最近最少访问淘汰算法,是内存不够的场景下,淘汰旧内容的策略。当内存中发生缺页异常的时候,需要从磁盘中读出最新的一页,那原来的一段时间内最少被访问的那一页就需要被替换掉。如何自己实现一个LRU队列,给定队列的容量,使之在常数时间内就能实现插入新的一页,删除最少访问的一页等操作呢?我们用基于hashmap和双向链表的方法:如上图所示:...原创 2019-09-18 16:47:21 · 191 阅读 · 0 评论 -
操作系统 虚存管理
把内存与外存有机的结合起来,从而得到一个容量很大的“内存”,这就是虚拟内存。可以分成按需取页和按需取段两种方式。基本原理:在程序装入时,不必将其全部读入到内存,而只需将当前需要执行的部分页或段读入到内存,就可让程序开始执行。在程序执行过程中,如果需执行的指令或访问的数据尚未在内存(称为缺页或缺段),则由处理器通知操作系统将相应的页或段调入到内存,然后继续执行程序。另一方面,操作系统...原创 2019-09-18 15:56:36 · 878 阅读 · 0 评论 -
段页式存储管理
内存管理有三种:页式管理,段式管理和段页式管理。1. 页式管理页式管理是用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个实际的物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配。每个物理块的大小一般取2的整数幂。内存的所有物理块从0开始编号,称作物理页号。程序的各个逻辑页面从0开始依次编号,称作逻辑页号或相对页号。每个页...原创 2019-09-18 15:44:12 · 1544 阅读 · 0 评论 -
操作系统 多线程之优先级翻转
优先级反转,是操作系统调度进程时出现的一种错误。是指在使用资源的时候时,可能会出现的这样一种不合理的现象,即:高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到CPU资源。-- 从现象上来看,好像是中优先级的任务比高优先级任务具有更高的优先权。具体来说:当高优先级任务正等待信号量(此信号量被一个低优先级任务拥有着)的时候,一个介于两个任务优先...原创 2019-09-14 21:15:09 · 429 阅读 · 0 评论 -
操作系统中阻塞和挂起的区别和联系
阻塞和挂起是操作系统的进程的状态描述,容易混淆。阻塞:正在执行的进程由于发生某时间(如I/O请求、申请缓冲区失败等)暂时无法继续执行。此时引起进程调度,OS把处理机分配给另一个就绪进程,而让受阻进程处于暂停状态,一般将这种状态称为阻塞状态。挂起:由于系统和用户的需要引入了挂起的操作,进程被挂起意味着该进程处于静止状态。如果进程正在执行,它将暂停执行,若原本处于就绪状态,则该进程此时暂不接受...原创 2019-09-14 11:14:31 · 6702 阅读 · 2 评论 -
进程和线程的区别
首先什么是进程?进程是具有独立功能的程序关于某个数据集合的一次运行活动,进程是CPU进行资源分配的最小单位。什么是线程?线程可以看作进程中的一个运行的实体,是CPU进行调度的单位,可以看作是一个轻量级的进程。他们的区别如下:①从定义上就能看出,进程是资源分配的最小单位,线程是CPU调度的最小单位。不同进程之间是不能共享数据和资源的,因为每个进程在创建的时候会分配独立的地址空间。而线程之...原创 2019-09-13 15:48:30 · 158 阅读 · 0 评论