day33_0601
选择题
对进程调度算法中,排队等待时间最长的作业即是最先进入等待队列的作业;
短作业优先算法是根据作业运行时间长短来衡量的;
优先级调度算法分为静态优先权和动态优先权;
响应比高优先算法其实也是一种优先级调度,其优先权权值相当于响应比,响应比等于作业响应时间除以作业要求服务的时间。
读写锁在写加锁状态时,其他进行写操作线程会阻塞.
写锁就是防止其他进程读或写.
读锁就是防止在读的时候有写进程进入
缺页中断调入新页面,肯定要修改页表项和分配页框,所以Ⅰ、Ⅲ可能发生,同时内存没有页面,需要从外存读入,会发生磁盘I/O。
第一段 - 是指文件类型 表示这是个普通文件
第二段 rwx 是指拥有者具有可读可写可执行的权限
第三段 rwx 是指所属于这个组的成员对于这个文件具有,可读可写可执行的权限
类似于windows中的组权限比如administrators组,属于这个组的成员对于文件的都有 可读可写可执行权限
第四段 — 是指其他人对于这个文件没有任何权限
活跃度失败意思就是调用不到了线程了,那么三种都有可能; 死锁也就是互相等着对方释放资源,结果谁也得不到;活锁可能发生让某一个线程一直处于等待状态,其他线程都可以调用到;饥饿我就感觉用抢占式说好说,每次来就执行优先级高的,那么优先级低的可能永远执行不到。
a.刚运行就降低,有可能会被抢断
b.已经进入就绪状态
d.长期在就绪也就是等待,再大升高优先级就要饿死了
对于Ⅰ,当所读文件的数据不在内存时,产生中断(缺页中断),原进程进入阻塞状态,直到所需数据从外存调入内存后,才将该进程唤醒。
对于Ⅱ,read系统调用通过陷入将CPU从用户态切换到核心态,从而获取操作系统提供的服务。
对于Ⅲ,要读一个文件首先要用open系统调用打开该文件。open中的参数包含文件的路径名与文件名,而read只需要使用open返回的文件描述符,并不使用文件名作为参数。read要求用户提供三个输入参数:①文件描述符fd;②buf缓冲区首址;③传送的字节数n。read的功能是试图从fd所指示的文件中读入n个字节的数据,并将它们送至由指针buf所指示的缓冲区中。
已经用完时间片会进入就绪状态,所以不进入阻塞状态
由于响应比等于等待时间加上服务时间再除以服务时间,所以等待时间相同时,短作业的响应比更大,能优先获得时间片,另一方面,当服务时间相同时,等待时间越长,响应比越大,所以同时照顾了长作业。
父进程和子进程都有自己独立的地址空间;
父进程结束,所有子进程都结束,进程结束,所有线程都结束;
如果多个进程同时占有对方需要的资源而同时请求对方的资源,而它们在得到请求之前不会释放所占有的资源,那么就会导致死锁的发生,也就是进程不能实现同步。
多线程和多进程都会引起死锁,一般说的死锁指的是进程间的死锁。
编程
剪花布条
在s中从第一个字符i=0开始截取t字符串的长度的字符str,然后和t字符串作比较,
等于可以剪出的布条数加一,并且从str后继续判断,知道剩余未判断字符长度小于t的长度;
不等于i++,从下一个字符开始判断;
import java.util.Scanner; public class Main{ public static void main(String []args){ Scanner sc=new Scanner(System.in); while(sc.hasNext()){ String string=sc.nextLine(); String[] str=string.split(" "); int len=str[1].length(); int count=0; for (int i = 0; i <=str[0].length()-len; i++) { String s=str[0].substring(i,i+len); if(str[1].equals(s)){ count++; i=i+len-1; } } System.out.println(count); } } }
客似云来
很明显每天来店里的人数可以构成斐波那契数,
其实就是算某一段的斐波那契数的和;
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); long[] arr=new long[100001]; arr[0]=1; arr[1]=1; for(int i=2;i<arr.length;i++){ arr[i]=arr[i-1]+arr[i-2]; } while(sc.hasNext()){ int from=sc.nextInt(); int to=sc.nextInt(); long count=0; for(int i=from-1;i<=to-1;i++){ count+=arr[i]; } System.out.println(count); } } }