设备管理:
课后练习P294页第5、7题。
画出示意图并给出结果。
虚拟存储管理
P251,习题20
(1)
0AC5 对应的二进制位 0000 1010 1100 0101
所以页号和页框分别为2和8
8的二进制位1000
所以0AC5H对应的地址为10001011000101
(2)
AC5H二进制为1 1010 1100 0101 ,
P252,习题31
(1)走向:0,0,1,1,0,3,1,2,2,4,4,3
(2)FIFO:
LRU:
OPT:
分页存储管理和分段存储管理
1.采用相联存储器后地址转换过程,用图表示出来
2.详述分段管理和分页管理的区别。
1,分段是信息的逻辑单位,由源程序的逻辑结构及含义所决定,是用户可见的,段长由用户根据需要来确定,段起始地址可从任何内存地址开始。在分段方式中,源程序(段号、段内位移)经链接装配后仍保持二维(地址)结构,引入目的是满足用户模式化程序设计的需要。
2,分页是信息的物理单位,与源程序的逻辑结构无关,是用户不可见的,页长由系统(硬件)确定,页面只能从页大小的整数倍地址开始。在分页方式中,源程序(页号、页内位移)经链接装配后变成一维(地址)结构,引入目的是实现离散分配并提高内存利用率。
1、页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。
段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需要。
2、页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。
段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。
3、分页的作业地址空间是维一的,即单一的线性空间,程序员只须利用一个记忆符,即可表示一地址。
3.P249 习题11。
(1)649
(2)1727
(3)2301
(4)140
(5)1956
操作系统实验二:并发程序设计
一、实验目的
(1)加深对进程并发执行的理解,认识多进程并发执行的实质。
(2)观察进程共享资源的现象,学习解决进程互斥和同步的方法。
二、实验要求:
本实验要求用高级语言,启动多进程并发运行,设计相应代码,显示进程无关并发、进程共享变量并发的运行结果。并完成实验报告。
三、实验内容:
分别实现以下四种情况的并发:
1.并发的进程之间无关,显示进程名称,开始与结束时间。
模拟多终端售票情况,并发的多个终端进程之间共享剩余票数这个共享变量。
2.用全局变量实现。
3.用进程间共享数据机制实现。
4.用进程间共享数据机制和加锁机制实现。
四、实验过程与结果
- 算法思想与设计
- 算法实现代码
- 运行结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
public
class
ThreadTest3 {
public
static
void
main(String[] args) {
Shop shop =
new
Shop();
for
(
int
i =
1
; i <=
5
; i++) {
new
Thread(shop,
""
).start();
}
}
}
class
Shop
implements
Runnable{
String name;
ticket t;
public
Shop() {
t.total =
100
;
t.count =
0
;
}
public
void
run() {
while
(t.total>
0
) {
synchronized
(
this
) {
try
{
Thread.sleep(
new
Random().nextInt(
1000
));
}
catch
(InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+
"_____"
+t.count);
t.total--;
t.count++;
}
}
}
}
class
ticket {
int
total;
int
count;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
public
class
ThreadTest3 {
public
static
void
main(String[] args) {
Shop shop =
new
Shop();
for
(
int
i =
1
; i <=
5
; i++) {
new
Thread(shop,
""
).start();
}
}
}
class
Shop
implements
Runnable{
String name;
ticket t;
public
Shop() {
t.total =
100
;
t.count =
0
;
}
public
void
run() {
while
(t.total>
0
) {
synchronized
(
this
) {
try
{
Thread.sleep(
new
Random().nextInt(
1000
));
}
catch
(InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+
"_____"
+t.count);
t.total--;
t.count++;
}
}
}
}
class
ticket {
int
total;
int
count;
}
|
用信号量及其PV操作处理实际问题
将生产者和消费者问题深入理解、融会贯通。
1.书上课后练习P187-43
semaphore empty;
while(1){
P(empty) ;
产生一个0-2的随机数 ;
if(s==0)
V(sweat) ;
else if( s==1)
V(water);
else V(orange) ;
}
}
while(1){
P(orange) ;
P(mutex) ;
V(mutex) ;
V(empty) ;
}
}
process P2(){
while(1){
P(sweat) ;
P(mutex) ;
V(mutex) ;
V(empty) ;
}
}
process P3(){
while(1){
P(water) ;
P(mutex) ;
V(mutex) ;
V(empty) ;
}
}
2.IPO问题:有多个输入进程、多个处理进程和多个输出进程。输入进程把数据逐步输入到一个有M个单位缓冲区B1上,经处理进程处理之后放到有N个单位的缓冲区B2上,由输出进程进行输出。
- 这个问题有哪些进程?进程之间有什么样的制约关系?
- 用信号量及PV操作写出这些进程之间的同步算法。
-
S1=S2=S3=S4=0;
mutex1=1;mutex2=1;process input
begin
输入数据;
P(S1);
P(mutex1);
数据放入B1(in1);
in1=(in+1)%M;
V(mutex1);
V(S2);
endprocess handle
begin
P(S2);
P(mutex1);
从B1(out1)取出数据;
out1=(out+1)%M;
V(mutex1);
V(S1);
处理数据;
P(S3);
P(mutex2);
数据放入B2(in2);
in2=(in2+1)%N;
V(mutex2);
V(S4);
endprocess output
begin
P(S4);
P(mutex2);
从B2(out2)取出数据;
out2=(out2+1)%N;
V(mutex2);
V(S3);
输出数据;
end
3.探索哲学家问题的正确解法。
- https://blog.csdn.net/qq_37683835/article/details/79999012
- https://www.colabug.com/3522710.html
处理器管理与进程管理
观察父进程、子进程
观察进程运行状态
输入多个作业的作业编号,到达时间,所需CPU时间,形成列表,以备算法使用。
jobs =[]
job1 = job.split(',')
jobs.append(job1)