“高响应比优先调度算法(Highest Response Ratio Next)是一种对CPU中央控制器响应比的分配的一种算法。HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之间的折中算法,既考虑作业等待时间又考虑作业运行时间,既照顾短作业又不使长作业等待时间过长,改进了调度性能。”
- rwx rwx rwx :[档案权限][档案拥有者权限[档案所属群组权限][其他人权限]
1.当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞
2.当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但是以写模式对它进行加锁的线程将会被阻塞
3.当读写锁在读模式的锁状态时,如果有另外的线程试图以写模式加锁,读写锁通常会阻塞随后的读模式锁的请求,这样可以避免读模式锁长期占用,而等待的写模式锁请求则长期阻塞。
“活跃度失败意思就是调用不到了线程了,那么三种都有可能; 死锁也就是互相等着对方释放资源,结果谁也得不到;活锁可能发生让某一个线程一直处于等待状态,其他线程都可以调用到;饥饿我就感觉用抢占式说好说,每次来就执行优先级高的,那么优先级低的可能永远执行不到。”
在使用锁保证现场安全时可能会出现 活跃度 失败的情况主要包括 饥饿、丢失信号、和活锁、死锁 等。【多线程除了死锁之外遇到最多的就是活跃度问题了】
关于"时间片切换",当进程已经获得了除cpu外所有的资源,这时的状态就是就绪态,当分配到了时间片就成了执行态,当时间片用完之前一直未进入阻塞态的话,此后便继续进入就绪态。所以进程的就绪与阻塞是完全不同的。
进程有3个状态:就绪态。执行态、阻塞态。三种状态的转换包含有:
就绪->执行,执行->就绪,执行->阻塞,阻塞->就绪
等待I/O、进程sleep、等待解锁等原因都会导致进程暂停。
缺页中断调入新页面,肯定要修改页表项和分配页框,所以Ⅰ、Ⅲ可能发生,同时内存没有页面,需要从外存读入,会发生磁盘I/O。
父进程和子进程都有自己独立的地址空间;
父进程结束,所有子进程都结束,进程结束,所有线程都结束;
如果多个进程同时占有对方需要的资源而同时请求对方的资源,而它们在得到请求之前不会释放所占有的资源,那么就会导致死锁的发生,也就是进程不能实现同步。
多线程和多进程都会引起死锁,一般说的死锁指的是进程间的死锁。
C:他已经进入就绪状态了。
D:原因 长期在就绪也就是等待,再不升高优先级就要饿死了 。
A:人家刚运行,你就降低,有可能会被抢断。
若文件的数据不在内存中,则进程进入睡眠模式的目的是等待内存对磁盘上文件的映射,因为磁盘的读取比较慢,所以事进入睡眠模式。
read是系统调用,所以CPU从用户态切换到核心态。
open系统调用应该包含文件的名称,read只是包含输入流(read包含文件描述符)。
响应比=(作业执行时间十作业等待时间)/作业执行时间。高响应比调度算法在等待时间相同的情况下,作业执行时间越短响应比越高,满足短任务优先。随着等待时间增加,响应比也会变大,执行机会就增大,所以不会产生饥饿现象。
NowCoder开了一家早餐店,这家店的客人都有个奇怪的癖好:他们只要来这家店吃过一次早餐,就会每天都过来;并且,所有人在这家店吃了两天早餐后,接下来每天都会带一位新朋友一起来品尝。
于是,这家店的客人从最初一个人发展成浩浩荡荡成百上千人:1、1、2、3、5……
现在,NowCoder想请你帮忙统计一下,某一段时间范围那他总共卖出多少份早餐(假设每位客人只吃一份早餐)。输入描述:
测试数据包括多组。 每组数据包含两个整数from和to(1≤from≤to≤80),分别代表开店的第from天和第to天。输出描述:
对应每一组输入,输出从from到to这些天里(包含from和to两天),需要做多少份早餐。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
long[] arr=new long[80];
arr[0]=1;
arr[1]=1;
for (int i = 2; i < arr.length; i++) {
arr[i]=arr[i-1]+arr[i-2];
}
while (scanner.hasNext()){
int from=scanner.nextInt();
int to=scanner.nextInt();
long ret=0;
for (int i = from-1; i <= to-1 ; i++) {
ret+=arr[i];
}
System.out.print(ret+" ");
}
}
}
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
输入描述:
输入包含多组数据。 每组数据包含两个字符串s,t,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。输出描述:
对应每组输入,输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就输出0,每个结果占一行。示例1
输入
abcde a3 aaaaaa aa输出
0 3
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String str1 = scanner.next();
String str2 = scanner.next();
int count = 0;
while (str1.contains(str2)) {
str1 = str1.replaceFirst(str2, "");
count++;
}
System.out.println(count);
}
}
}
public String replaceFirst(String regex, String replacement);
String regex:中,字符串中匹配的正则表达式或字符串的第一个子字符串。
String replacement: 用来替换第一个匹配项的字符串。
例如:
有一个源字符串:java woai java,i like jajavava i enjoy java
删除该字符串中所有的"java"
输出结果:源字符串中总共包含:5 个 java ,删除java后的字符串为: woai,i like i enjoy
public class Main {
public static void main(String[] args) {
String str = "java woai java,i like jajavava i enjoy java ";
String del = "java";
int count = 0;
while (str.contains("java")) {
//如果有java的话,就把第一次出现的java用空字符串代替,并覆盖原str字符串
str = str.replaceFirst("java", "");
//统计java出现的次数
count++;
}
}
}