From 34a463b688e601acb4ece5d5d30dc54f562485b0 Mon Sep 17 00:00:00 2001
From: CyC2018 <1029579233@qq.com>
Date: Sat, 30 Jun 2018 18:49:48 +0800
Subject: [PATCH] auto commit
---
notes/Linux.md | 4 +-
...15\344\275\234\347\263\273\347\273\237.md" | 299 ------------------
2 files changed, 2 insertions(+), 301 deletions(-)
diff --git a/notes/Linux.md b/notes/Linux.md
index 1e5ebc84..27094e5c 100644
--- a/notes/Linux.md
+++ b/notes/Linux.md
@@ -187,8 +187,6 @@ GNU 计划,译为革奴计划,它的目标是创建一套完全自由的操
## HDD
-[Decoding UCS Invicta – Part 1](https://blogs.cisco.com/datacenter/decoding-ucs-invicta-part-1)
-
Hard Disk Drives(HDD) 俗称硬盘,具有以下结构:
- 盘面(Platter):一个硬盘有多个盘面;
@@ -200,6 +198,8 @@ Hard Disk Drives(HDD) 俗称硬盘,具有以下结构:
+[Decoding UCS Invicta – Part 1](https://blogs.cisco.com/datacenter/decoding-ucs-invicta-part-1)
+
## 磁盘接口
### 1. IDE
diff --git "a/notes/\350\256\241\347\256\227\346\234\272\346\223\215\344\275\234\347\263\273\347\273\237.md" "b/notes/\350\256\241\347\256\227\346\234\272\346\223\215\344\275\234\347\263\273\347\273\237.md"
index 6c1488bb..ddc5057e 100644
--- "a/notes/\350\256\241\347\256\227\346\234\272\346\223\215\344\275\234\347\263\273\347\273\237.md"
+++ "b/notes/\350\256\241\347\256\227\346\234\272\346\223\215\344\275\234\347\263\273\347\273\237.md"
@@ -9,7 +9,6 @@
* [进程与线程](#进程与线程)
* [进程状态的切换](#进程状态的切换)
* [进程调度算法](#进程调度算法)
- * [进程调度算法实现](#进程调度算法实现)
* [进程同步](#进程同步)
* [经典同步问题](#经典同步问题)
* [进程通信](#进程通信)
@@ -240,304 +239,6 @@ Linux 的系统调用主要有以下这些:
分为硬实时和软实时,前者必须满足绝对的截止时间,后者可以容忍一定的超时。
-## 进程调度算法实现
-
-以下只是假象系统上的调度算法实现。源代码:[Scheduling](https://github.com/CyC2018/Algorithm/tree/master/Process-Scheduling/src)
-
-### 1. FCFS
-
-首先创建进程数据结构:
-
-```java
-public class Process {
- private String name;
- private long totalTime;
- private long remainTime;
- private long comeInTime;
-
- public Process(String name, long totalTime, long comeInTime) {
- this.name = name;
- this.totalTime = totalTime;
- this.remainTime = totalTime;
- this.comeInTime = comeInTime;
- }
-
- public void run(long runTime) {
- System.out.println("process " + name + " is running...");
- System.out.println("come in time : " + comeInTime);
- System.out.println("total time : " + totalTime);
- System.out.println("remain time : " + remainTime);
- System.out.println();
- remainTime -= runTime;
- try {
- Thread.sleep(runTime);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
-
- public long getTotalTime() {
- return totalTime;
- }
-
- public long getRemainTime() {
- return remainTime;
- }
-
- public long getComeInTime() {
- return comeInTime;
- }
-}
-```
-
-接着创建一个进程等待队列数据结构:
-
-```java
-public interface ProcessQueue {
-
- void add(Process process);
-
- Process get();
-
- boolean isEmpty();
-}
-```
-
-FCFS 算法使用普通的先进先出队列即可实现该进程等待队列:
-
-```java
-public class FCFSProcessQueue implements ProcessQueue {
-
- private Queue queue = new LinkedList<>();
-
- @Override
- public void add(Process process) {
- queue.add(process);
- }
-
- @Override
- public Process get() {
- return queue.poll();
- }
-
- @Override
- public boolean isEmpty() {
- return queue.isEmpty();
- }
-}
-```
-
-接下来是调度器的实现,把它设计成可独立运行的 Thread,它对进程等待队列进行轮询,如果有进程的话就从队列中取出一个任务来执行。批处理系统中,调度器调度一个进程都直接让进程执行完毕,也就是给进程运行时间为进程的总时间。
-
-```java
-public class Scheduler extends Thread {
-
- protected ProcessQueue processQueue;
-
- public Scheduler(ProcessQueue processQueue) {
- this.processQueue = processQueue;
- }
-}
-```
-
-```java
-public class BatchScheduler extends Scheduler {
- public BatchScheduler(ProcessQueue processQueue) {
- super(processQueue);
- }
-
- @Override
- public void run() {
- while (true) {
- if (!processQueue.isEmpty()) {
- Process process = processQueue.get();
- process.run(process.getTotalTime());
- }
- try {
- Thread.sleep(10);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
-}
-```
-
-使用一个模拟器来模拟实际场景下进程的不定时到达,每 1s 到达一个进程,并且进程的运行时间再 0s \~ 3s 之间,使得多个进程会发生竞争关系。
-
-```java
-public class ProcessComeEmulator extends Thread {
-
- private ProcessQueue processQueue;
-
- public ProcessComeEmulator(ProcessQueue processQueue) {
- this.processQueue = processQueue;
- }
-
- @Override
- public void run() {
- int processId = 0;
- while (true) {
- System.out.println("process " + processId + " is coming...");
- System.out.println();
- Process process = new Process((processId++) + "", getRandomTime(), System.currentTimeMillis());
- processQueue.add(process);
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
-
- private long getRandomTime() {
- return (long) (Math.random() * 3000);
- }
-}
-```
-
-最后创建一个客户端来运行整个调度程序:
-
-```java
-public class FCFSClient {
- public static void main(String[] args) {
- ProcessQueue processQueue = new FCFSProcessQueue();
- ProcessComeEmulator processComeEmulator = new ProcessComeEmulator(processQueue);
- processComeEmulator.start();
- Scheduler scheduler = new FCFSScheduler(processQueue);
- scheduler.start();
- }
-}
-```
-
-执行结果如下:
-
-```html
-process 0 is coming...
-
-process 0 is running...
-come in time : 1528964425691
-total time : 1807
-remain time : 1807
-
-process 1 is coming...
-
-process 1 is running...
-come in time : 1528964426691
-total time : 2311
-remain time : 2311
-
-process 2 is coming...
-
-process 3 is coming...
-
-process 4 is coming...
-
-process 2 is running...
-come in time : 1528964427692
-total time : 2651
-remain time : 2651
-
-process 5 is coming...
-
-process 6 is coming...
-
-process 3 is running...
-come in time : 1528964428692
-total time : 137
-remain time : 137
-
-process 4 is running...
-come in time : 1528964429692
-total time : 2513
-remain time : 2513
-```
-
-### 2. SJF
-
-与 FCFS 不同的是,SJF 的进程等待队列需要使用优先级队列来实现:
-
-```java
-public class SJFProcessQueue implements ProcessQueue {
-
- private PriorityQueue processesQueue = new PriorityQueue<>(
- (o1, o2) -> (int) (o1.getTotalTime() - o2.getTotalTime()));
-
- @Override
- public void add(Process process) {
- processesQueue.add(process);
- }
-
- @Override
- public Process get() {
- return processesQueue.poll();
- }
-
- @Override
- public boolean isEmpty() {
- return processesQueue.isEmpty();
- }
-}
-```
-
-运行客户端:
-
-```java
-public class SJFClient {
- public static void main(String[] args) {
- ProcessQueue processQueue = new SJFProcessQueue();
- ProcessComeEmulator processComeEmulator = new ProcessComeEmulator(processQueue);
- processComeEmulator.start();
- Scheduler scheduler = new BatchScheduler(processQueue);
- scheduler.start();
- }
-}
-```
-
-```java
-process 0 is coming...
-
-process 0 is running...
-come in time : 1528964250005
-total time : 2496
-remain time : 2496
-
-process 1 is coming...
-
-process 2 is coming...
-
-process 1 is running...
-come in time : 1528964251006
-total time : 903
-remain time : 903
-
-process 3 is coming...
-
-process 2 is running...
-come in time : 1528964252006
-total time : 1641
-remain time : 1641
-
-process 4 is coming...
-
-process 5 is coming...
-
-process 4 is running...
-come in time : 1528964254007
-total time : 243
-remain time : 243
-
-process 5 is running...
-come in time : 1528964255007
-total time : 646
-remain time : 646
-
-process 3 is running...
-come in time : 1528964253006
-total time : 2772
-remain time : 2772
-```
-
## 进程同步
### 1. 临界区
--
GitLab