
操作系统
文章平均质量分 70
九死九歌
丹书铁契!
展开
-
【操作系统 & 图论】传参一个AOE图,得到按其拓扑排序及权值执行临界区代码的线程数组
import java.util.concurrent.Semaphore;public class Solution { final static float INF = Float.POSITIVE_INFINITY; static Semaphore[][] semaphores; public static Thread[] AOEThreads(float[][] matrix) { semaphores = new Semaphore[matrix.length][matri原创 2022-02-08 17:47:20 · 391 阅读 · 0 评论 -
【操作系统】利用信号量多个线程轮流打印数字
一、运行效果 先看效果: 传参3和10,那就是3个线程轮流打印10~1 。如下: 我们不妨胆子放开点。114个线程轮流打印514~1 。像这样传参。 运行效果:二、代码实现 这个其实都算很简单了。我之前写过一个复杂得多的,传参一个代表有向图的矩阵,让线程按照有向图中的前驱关系依次运行。链接在这里:【操作系统&数据结构图论】用有向图临接矩阵获得满足该前驱关系的线程数组 这个算法其实也是传参了一个图,一个环形的图,或者说一个环形单链表,即第n个节点只有指向第n+1个节点的原创 2021-11-17 23:29:07 · 1010 阅读 · 1 评论 -
【操作系统 & 计算机组成原理】设备控制器
一、设备控制器的概念 CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和/O设备机械部件之间的“中介”,用于实现CPU对设备的控制。 这个电子部件就是I/O控制器,又称设备控制器。CPU可控制/o控制器,又由/O控制器来控制设备的机械部件。二、设备控制器的功能 ① 接收和识别CPU发出的命令:如CPU发来的read/write命令,I/O控制器中会有相应的控制寄存器来存放命令和参数。 ② 向CPU报告设备的状态:I/O控制器中会有相应的状态寄存器,用于记录原创 2021-10-05 13:58:50 · 6684 阅读 · 2 评论 -
【操作系统&计算机组成原理】磁盘的结构
磁盘、磁道和扇区 磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据。 磁盘的盘面被划分成一个个磁道。这样的一个“圈”就是一个磁道。一个磁道又被划分成一个个扇区,每个扇区就是一个“磁盘块”。各个扇区存放的数据量相同(如1KB)。因而最内侧的扇区面积最小,数据密度最大。 磁头可以读取磁盘的数据,而最中间的马达会带动磁盘转动,从而使磁盘可以读取到不同的扇区。 如何读对磁盘中的数据进行读写呢?需要把“磁头”移动到想要读/写的扇区所在的磁道。磁盘会转起来,让目标扇区从磁头下面划过,原创 2021-10-03 10:01:09 · 1239 阅读 · 0 评论 -
【操作系统第三章】处理机调度与死锁
2.2_1 处理及调度的概念、层次1.调度是弄啥呢? 当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是“调度”研究的问题。 在多道程序系统中,进程的数量往往是多于处理机的个数的,这样不可能同时并行地处理各个进程。处理机调度,就是从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程的并发执行。 调度分为作业调度、内存调度和进程调度。这分别是调度的三个层级。2.七状态模型: 我们前面讲过了五状态模型:创建、就绪原创 2021-09-23 22:46:49 · 428 阅读 · 0 评论 -
【操作系统】结合哲学家进餐问题分析如何预防死锁
零、哲学家进餐问题 哲学家就餐问题可以这样表述,假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利面,所以假设哲学家必须用两只餐叉吃东西。他们只能使用自己左右手边的那两只餐叉。哲学家就餐问题有时也用米饭和筷子而不是意大利面和餐叉来描述,因为很明显,吃米饭必须用两根筷子。 哲学家从来不交谈,这就很危险,可能产生死锁,每个哲学家都拿着左手的餐叉原创 2021-09-23 18:10:51 · 2094 阅读 · 0 评论 -
【操作系统&java多线程技术】几种信号量机制算法
生产者消费者问题: 太经典了,就不多赘述了。import java.util.concurrent.Semaphore;public class ProducerAndConsumer { static int count = 0; private static final Semaphore full = new Semaphore(0); private static final Semaphore empty = new Semaphore(20); private stati原创 2021-09-21 00:49:44 · 289 阅读 · 2 评论 -
【操作系统&数据结构图论】用有向图临接矩阵获得满足该前驱关系的线程数组
输入: 一个无环有向图的对接矩阵。假设该矩阵尺寸为n × n输出: 一个长度为n的Thread数组。保证这n个线程的run方法内部都会通过Thread.currentThread().getName()输出一遍自己的线程名。并且输出的顺序要满足有向图中的前驱关系。run方法中的其它代码可以任意顺序执行。 假设这个算法的名称是func(),表示有向图的对接矩阵是matrix,那么main函数中的内容是: public static Thread[] func(boolean[][] ma原创 2021-09-19 20:18:54 · 308 阅读 · 0 评论 -
【操作系统】peterson算法
一、简述 算法思想:双标志后检查法中,两个进程都争着想进入临界区,但是谁也不让谁,最后谁都无法进入临界区。Gary L. Peterson想到了一种方法,如果双方都争着想进入临界区,那可以让进程尝试“孔融让梨”,主动让对方先使用临界区。 Peterson算法用软件方法解决了进程互斥问题,遵循了空闲让进、忙则等待、有限等待三个原则,但是依然未遵循让权等待的原则。二、代码实现public class PeterSon implements Runnable { private static in原创 2021-09-19 10:26:54 · 2571 阅读 · 0 评论 -
【操作系统】第二章:进程的描述与控制
2.1_1 进程的定义、组成、组织方式、特征1.定义 首先,程序就是一个指令序列,早期的计算机仅支持单道程序。 这个时候内存只有两个部分,程序段和数据段。程序的代码放在程序段内,程序运行过程处理的数据放在数据段内(如变量) 引入多道程序技术后,内存中同时放入多道程序,各个程序的代码、运算数据存放的位置不同。操作系统要怎么才能找到各程序的存放位置呢? 系统为每个运行的程序配置一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码存放位置) PCB、程序段、数据段三部分原创 2021-09-12 21:52:43 · 479 阅读 · 0 评论 -
【操作系统】第一章:操作系统概述
1.1_1 操作系统作为系统资源的管理者:提供的服务:处理机(CPU)管理存储器管理文件管理设备管理目标:高效、安全作为用户与计算机之间的接口:提供的服务命令接口:允许用户直接使用联机命令接口:用户说一句,计算机做一件脱机命令接口:用户说一句,计算机做一堆程序接口:通过程序间接使用GUI图形界面(不常考)目标:方便用户使用 常用的dos命令就属于命令接口。C盘下面有一些*.bat文件,是dos下的批处理文件,规定了某条脱机dos命令对应某原创 2021-09-06 21:25:05 · 427 阅读 · 2 评论