| 注册
home doc ppt pdf
请输入搜索内容

热门搜索

年终总结个人简历事迹材料租赁合同演讲稿项目管理职场社交

山东大学大二下学期操作系统实验报告

文***享

贡献于2021-05-06

字数:30320


操作系统实验报告











计算机科学技术学院
计算机科学技术专业
2012级X班

目录
进程控制实验 3
11 实验目 3
12示例实验 3
121实验容 3
13独立实验 4
131实验容 4
132实验步骤 4
133实验演示结果 7
134实验代码 7
二进程调度算法实验 9
21 实验目 9
22示例实验 10
221实验容 10
222实验演示结果 10
23独立实验 11
231实验容 11
232实验步骤 12
233实验演示结果 14
234实验代码 14
二 进程步实验 16
31 实验目 16
32示例实验 16
321实验容 16
322实验演示结果 17
33独立实验 17
331实验容 17
332实验步骤 18
333实验演示结果 21
334实验代码 21
三 存页面置换算法实验 31
41 实验目 31
42示例实验 31
421实验容 31
422实验演示结果 32
43独立实验 32
431实验容 32
432实验步骤 33
433实验演示结果 35
434实验代码 37
四 磁盘移臂调度算法实验 48
51 实验目 48
52示例实验 49
521实验容 49
522实验演示结果 50
53独立实验 50
531实验容 50
532实验步骤 51
533实验演示结果 54
534实验代码 54


进程控制实验
11 实验目
加深进程发执行概念理解实践发进程创建控制方法观察体验进程动态特性进步理解进程生命期期间创建变换撤销状态变换程掌握进程控制方法解父子进程间控制协作关系练 Linux 系统中进程创建控制关系统调编程调试技术
12示例实验
121实验容
实验示例程序应实现类似shell 子命令功执行程序中启动新子进程执行新命令发执行122实验演示结果

13独立实验
131实验容
参考示例程序中建立发进程方法编写父子协作进程父进程创建子进程控制隔 3 秒显示次前目录中文件名列表
132实验步骤 
1321算法设计
通进程间通讯先创建父进程子进程父进程沉睡3秒子进程作前父进程次创建子进程前子进程执行显示前目录文件列表功执行execve()方法死亡While(1) 死循环里限进行前操作达父进程创建子进程控制隔3秒显示次前目录中文件名列表求
1322开发调试程
开终端命令行窗体新建文件夹该文件夹中建立名pctrlcC语言程序
建立名 pctrlh C 语言头文件
建立项目理文件 Makefile
输入 make 命令编译连接生成执行 pctl 程序
执行 pctl 程序
次执行带子进程指定执行命令 pctl 程序
1323思考分析
1.反映进程特征功真实操作系统中样实现反映出教材中讲解进程生命期进程实体进程状态控制进程概念发概念新理解认识?子进程创建执行新程序?
答:进程发执行程序某数集次运行程序次运行程程序进程组成部分进程程序执行程程序静态指令集合进程动态程实体动态产生发展消失
外谓进程发执行宏观发微观交执行进程唯整数形式进程标识符标识通fork()系统调创建新进程新进程通复制原进程址空间成种机制允许父子进程方便进行通信
系统调fork()子进程实际父进程克隆体执行新程序系统调exec()新程序取代进程存空间功根参数指定文件名找程序文件装入存覆盖原进程映形成父进程子进程进程映更换外新进程PIDPCB属性均保持变实际新进程壳原子进程开始运行父进程通系统调waitpid()移出绪队列等子进程终止
2.信号机理什?样利信号实现进程控制?
信号应正整数常量(signal number定义系统头文件中)代表户诸进程间传送事先约定信息类型通知某进程发生某异常事件进程运行时通信号机制检查否信号达中断正执行程序转该信号相应处理程序已完成事件处理处理结束返回原断点继续执行
133实验演示结果


134实验代码
pctlc文件:
#include pctlh
int main()
{
int pid_1pid_2 存放子进程号

int status_1status_2 存放子进程返回状态
while(1){
pid_1fork()
if(pid_1<0) 建立子进程失败
{
printf(Create Process fail\n)
exit(EXIT_FAILURE)
}
if(pid_1 0) 子进程执行代码段
{
报告父子进程进程号
printf(I am Childls process d\nMy father is d\ngetpid()getppid())*getpid 返回前进程进程号getppid 返回前进程父进程进程号*
pid_2fork()
if(pid_2<0) 建立子进程失败

{
printf(Create Process fail\n)
exit(EXIT_FAILURE)
}
if(pid_20) 子进程执行代码段

{报告父子进程进程号

printf(I am Childps process d\nMy father is d\ngetpid()getppid())
printf(d child will Running \ngetpid()) *子进程键盘中断信号唤醒继续执行*

status_2execve(binpsNULLNULL)装入执行新程序

}else{
printf(wait for the pschild endd\npid_2)
waitpid(pid_2&status_20)等子进程2结束
status 保留子进程退出状态
}
printf(d child will Running \ngetpid()) 装入执行新程序
char *argv[]{0NULL}
status_1 execve(binlsargvNULL)
}
else{
printf(I am Parent process d\ngetpid())
printf(wait for the lschild end d\npid_1)
waitpid(pid_1&status_10)
printf(child endsleep\n)
sleep(3) sleep 函数会令调进程执行挂起睡眠3秒
}
}
return EXIT_SUCCESS
}

pctlh文件:
#include
#include
#include
#include
#include
#include
进程定义键盘中断信号处理函数
typedef void (*sighandler_t) (int)
void sigcat(){
printf(d Process continue\ngetpid())
}
二进程调度算法实验
21 实验目
加深进程调度概念理解体验进程调度机制功解 Linux 系统中进程调度策略方法 练进程调度算法编程调试技术
22示例实验
221实验容
示例实验程序测试 linux 系统中调度策略优先数调度效果
222实验演示结果


23独立实验
231实验容
设两发执行父子进程断循环输出进程号优先数调度策
略进程初始调度策略均系统默认策略默认优先级某进程收 SIGINT
信号时会动优先数加 1收 SIGCSTP 信号时会动优先数减 1请编
程实现功
232实验步骤
2321算法设计
建立父进程子进程通第章学进程控制相互发送信号 Ctrl+C 时父进程实现优先级加 1Ctrl+Z 时子进程实现优先级减1
signal 系统调父进程注册进程处理 SIGINT 实现优先级加 1 函数子进程注册进程处理SIGTSTP 实现优先级减 1 函数 Ctrl+Z 时子进程做出响应优先级减 1Ctrl+C 时父进程做出响应父进程优先级加 1然输出进程号优先数调度策略行通 for()语句循环
2322开发调试程
新建文件夹该文件夹中建立名 pctlc C 语言程序
建立名pctlh C 语言头文件
建立项目理文件 Makefile
输入 make 命令编译连接生成执行pctl程序
执行调试 pctl程序
2323思考分析
进程调度调度策略功示
SCHED_OTHER 默认分时调度策略(值等 0)
SCHED_FIFO 先进先先出调度策略(值等 1)
SCHED_RR 时间片轮转调度策略(值等 2)
进程调度质谁先执行谁执行真实操作系统中调度策略优先级决定谁先执行Linux 调度策略三种SCHED_OTHER 分时调度SCHED_FIFO 先进先出SCHED_RR 时间片轮转两种专响应时间特殊求进程会抢先 SCHED_OTHER 调度策略进程执行通系统调设置进程调度策略intsched_setscheduler(pid_t pidint policyconst struct sched_param *sp) 中 pid 进程号policy 说明 3 种调度策略sp 调度参数结构指针调度参数结构存调度优先数进程优先数(prio)静态优先级动态优先级两部分组成静态优先级调度策略关动态优先级系统调设置int setpriority(int whichint whoint prio)which 设置象:
进程 PRIO_PROCESS
进程组 PRIO_PGRP
户 PRIO_USER
who 应设置象进程号组号户号
prio 设置进程优先数
233实验演示结果

234实验代码
pschedc文件:
#include
#include
#include
#include
#define SIGINT 2
#define SIGTSTP 20
void handler_sigint(int signo) { 提升优先数
printf(\nd 进程优先数增加 1\ngetpid())
setpriority(PRIO_PROCESS getpid()
getpriority(PRIO_PROCESSgetpid()) + 1)
}
void handler_sigtstp(int signo) { 降低优先数

printf(\nd 进程优先数减 1\ngetpid())
setpriority(PRIO_PROCESS getpid()
getpriority(PRIO_PROCESSgetpid()) 1)
}
int main() {
pid_t pid
if((pid fork()) < 0 ){
perror(process create error)
}
if(pid > 0) {
signal(SIGINT handler_sigint) 父进程处理 Ctrl+C
signal(SIGTSTP SIG_IGN) 忽略 Ctrl+Z
}else{
setpriority(PRIO_PROCESS getpid() 10) 设定子进程初始动态优先级 10否出效果
signal(SIGTSTP handler_sigtstp) 子进程处理Ctrl+Z
signal(SIGINT SIG_IGN) 忽略 Ctrl+C
}
int i1
while(i<20) {
if(pid > 0) {
printf(I'm parent process )
}else{
printf(I'm child process )
}
printf(pid d priority d scheduler d\n
getpid() getpriority(PRIO_PROCESS
getpid())sched_getscheduler(getpid()))
sleep(3)
i++
}
}
文件示例实验
二 进程步实验
31 实验目
加深发协作进程步互斥概念理解观察体验发进程步互斥操作效果分析研究典进程步互斥问题实际解决方案解 Linux 系统中 IPC 进程步工具法练发协作进程步互斥操作编程调试技术
32示例实验
321实验容
示例实验程序应模拟生产消费者界缓正确操作利 N 字节享存作界循环缓区利写字符模拟放产品利读字符模拟消费产品缓区空时消费者应阻塞睡眠缓区满时生产者应阻塞睡眠旦缓区中空单元生产者进程空单元中入写字符报告写容位置旦缓区中未读字符消费者进程该单元中读出字符报告读取位置生产者单元中连续写两次相字符消费者单元中连续读两次相字符
322实验演示结果

33独立实验
331实验容
抽烟者问题假设系统中三抽烟者进程抽烟者断卷烟抽烟抽烟者卷起抽掉颗烟需三种材料:烟草纸胶水抽烟者烟草纸胶水系统中两供应者进程限供应三种材料次仅轮流提供三种材料中两种缺失两种材料抽烟者卷起抽掉颗烟会发信号通知供应者继续提供外两种材料程重复进行 请介绍 IPC 步机制编程实现该问题求功
332实验步骤
3321问题分析
两供应者三消费者存放烟草纸胶水公缓区 3存放序指定分烟草纸胶水供应者供应物品三种(烟草+纸)(烟草+胶水)(纸+胶水) 三消费者分需三里面种
约束:
(1)某时刻供应者放入物品
(2) 某时刻 消费者 保证消费者恰需刚刚生产物品
(3)供应者提供种物品生产什物品等消费者走物品继续生产
3322算法设计
(1)供应者文完全样程序中 fork()子进程父进程子进程发执行供应者代码
(2)消费者三消费者需物品代码段样需建立两子进程父进程时发执行 然区域执行相似代码段
(3)信号灯实现步互斥约束
(4)创建公缓区指首址指针
获取缓区享存buff_ptr 指缓区首址
buff_ptr (char *)set_shm(buff_keybuff_numshm_flg)
获取供应者放产品首位置指针 pput_ptr
pput_ptr (int *)set_shm(pput_keypput_numshm_flg)
3323开发调试程
新建文件夹该文件夹中建立名 ipch C 语言头文件
建立名 ipcc C 语言头文件实现头文件中申明函数
建立名 producerc C 语言头文件实现供应者功
建立名 consumerc C 语言头文件实现消费者功
建立项目理文件 Makefile
输入 make 命令编译连接生成执行 producer consumer 程序
执行调试 producer consumer 程序
3324思考分析
进程间步该实验中通信号灯实现 进程间步信号灯必须完全相进程中创建样信号灯会进程享然通执行信号灯 up() down()操作进程发执行时保持步果信号灯值 0进程会阻塞什够步
操作系统中进程步通信号量机制实现实验中信号灯信号量 down()操作信号量 wait 操作up()操作信号量 signal 操作
333实验演示结果

334实验代码
ipch文件:
#include
#include
#include
#include
#include
#include
#include
#define BUFSZ 256
建立获取 ipc 组函数原型说明
int get_ipc_id(char *proc_filekey_t key)
char *set_shm(key_t shm_keyint shm_numint shm_flag)
int set_msq(key_t msq_keyint msq_flag)
int set_sem(key_t sem_keyint sem_valint sem_flag)
int down(int sem_id)
int up(int sem_id)
typedef union semuns {
int val
} Sem_uns
typedef struct msgbuf {
long mtype
char mtext[1]
} Msg_buf
生产消费者享缓区关变量
key_t buff_key
int buff_num
char *buff_ptr
生产者放产品位置享指针
key_t pput_key
int pput_num
int *pput_ptr
消费者取产品位置享指针
key_t cget_key
int cget_num
int *cget_ptr
生产者关信号量
key_t prod_key
key_t pmtx_key
int prod_sem
int pmtx_sem
消费者关信号量
key_t c_PG_key
key_t c_TP_key
key_t c_TG_key
key_t cmtx_key
int c_PG_sem
int c_TP_sem
int c_TG_sem
int cmtx_sem
int sem_val
int sem_flg
int shm_flg


ipcc文件:
#include ipch
int get_ipc_id(char *proc_filekey_t key)
{
FILE *pf
int ij
char line[BUFSZ]colum[BUFSZ]
if((pf fopen(proc_filer)) NULL){
perror(Proc file not open)
exit(EXIT_FAILURE)
}
fgets(line BUFSZpf)
while(feof(pf)){
i j 0
fgets(line BUFSZpf)
while(line[i] ' ') i++
while(line[i] ' ') colum[j++] line[i++]
colum[j] '\0'
if(atoi(colum) key) continue
j0
while(line[i] ' ') i++
while(line[i] ' ') colum[j++] line[i++]
colum[j] '\0'
i atoi(colum)
fclose(pf)
return i
}
fclose(pf)
return 1
}
int down(int sem_id)
{
struct sembuf buf
bufsem_op 1
bufsem_num 0
bufsem_flg SEM_UNDO
if((semop(sem_id&buf1)) <0) {
perror(down error )
exit(EXIT_FAILURE)
}
return EXIT_SUCCESS
}
int up(int sem_id)
{
struct sembuf buf
bufsem_op 1
bufsem_num 0
bufsem_flg SEM_UNDO
if((semop(sem_id&buf1)) <0) {
perror(up error )
exit(EXIT_FAILURE)
}
return EXIT_SUCCESS
}
int set_sem(key_t sem_keyint sem_valint sem_flg)
{
int sem_id
Sem_uns sem_arg
测试 sem_key 标识信号灯数组否已建立
if((sem_id get_ipc_id(procsysvipcsemsem_key)) < 0 )
{
semget 新建信号灯标号返回 sem_id
if((sem_id semget(sem_key1sem_flg)) < 0)
{
perror(semaphore create error)
exit(EXIT_FAILURE)
}
设置信号灯初值
sem_argval sem_val
if(semctl(sem_id0SETVALsem_arg) <0)
{
perror(semaphore set error)
exit(EXIT_FAILURE)
}
}
return sem_id
}
char * set_shm(key_t shm_keyint shm_numint shm_flg)
{
int ishm_id
char * shm_buf
测试 shm_key 标识享存区否已建立
if((shm_id get_ipc_id(procsysvipcshmshm_key)) < 0 )
{
shmget 新建 长度 shm_num 字节享存标号返回 shm_id
if((shm_id shmget(shm_keyshm_numshm_flg)) <0)
{
perror(shareMemory set error)
exit(EXIT_FAILURE)
}
shmat shm_id 标识享存附加指针 shm_buf
if((shm_buf (char *)shmat(shm_id00)) < (char *)0)
{
perror(get shareMemory error)
exit(EXIT_FAILURE)
}
for(i0 i}
shm_key 标识享存区已建立 shm_id 标识享存附加指针 shm_buf
if((shm_buf (char *)shmat(shm_id00)) < (char *)0)
{
perror(get shareMemory error)
exit(EXIT_FAILURE)
}
return shm_buf
}
int set_msq(key_t msq_keyint msq_flg)
{
int msq_id
测试 msq_key 标识消息队列否已建立
if((msq_id get_ipc_id(procsysvipcmsgmsq_key)) < 0 )
{
msgget 新建消息队列标号返回 msq_id
if((msq_id msgget(msq_keymsq_flg)) < 0)
{
perror(messageQueue set error)
exit(EXIT_FAILURE)
}
}
return msq_id
}
producerc文件:
#include ipch
int main(int argcchar *argv[])
{
int rate
命令行第参数指定进程睡眠秒数调解进程执行速度
if(argv[1] NULL) rate atoi(argv[1])
else rate 3 指定 3 秒
享存变量
buff_key 101缓区键值
buff_num 3缓区长度
pput_key 102生产者放产品指针键值
pput_num 1 指针数
shm_flg IPC_CREAT | 0644享存读写权限
获取缓区享存buff_ptr 指缓区首址
buff_ptr (char *)set_shm(buff_keybuff_numshm_flg)
获取生产者放产品位置指针 pput_ptr
pput_ptr (int *)set_shm(pput_keypput_numshm_flg)
信号量变量
prod_key 201生产者步信号灯键值
pmtx_key 202生产者互斥信号灯键值
c_PG_key 301消费者步信号灯键值
c_TP_key 302消费者互斥信号灯键值
c_TG_key 303消费者互斥信号灯键值
sem_flg IPC_CREAT | 0644
生产者步信号灯初值设缓区量
sem_val 1
获取生产者步信号灯引标识存 prod_sem
prod_sem set_sem(prod_keysem_valsem_flg)
消费者初始产品取步信号灯初值设 0
sem_val 0
获取消费者步信号灯引标识存 cons_sem
c_PG_sem set_sem(c_PG_keysem_valsem_flg)
c_TP_sem set_sem(c_TP_keysem_valsem_flg)
c_TG_sem set_sem(c_TG_keysem_valsem_flg)
生产者互斥信号灯初值 1
sem_val 1
获取生产者互斥信号灯引标识存 pmtx_sem
pmtx_sem set_sem(pmtx_keysem_valsem_flg)
循环执行模拟生产者断放产品
int pid
int i
pid fork()
if(pid 0) {
while(1){
int r rand() 3
if(r 0) {
down(prod_sem)
果生产者正放产品生产者阻塞
down(pmtx_sem)
写字符形式模拟生产者放产品 报告进程号放入字符存放位置
buff_ptr[*pput_ptr + 1] 'P'
buff_ptr[*pput_ptr + 2] 'G'
sleep(rate)
printf(d 供 应 商 提 供 纸 c 胶 水 c\ngetpid()buff_ptr[*pput_ptr +1] buff_ptr[*pput_ptr + 2])
唤醒阻塞生产者
up(pmtx_sem)
唤醒阻塞消费者
up(c_PG_sem)
} else if(r 1) {
down(prod_sem)
果生产者正放产品生产者阻塞
down(pmtx_sem)
写字符形式模拟生产者放产品 报告进程号放入字符存放位置
buff_ptr[*pput_ptr] 'T'
buff_ptr[*pput_ptr + 2] 'G'
sleep(rate)
printf(d供应商提供烟草c胶水c\ngetpid()buff_ptr[*pput_ptr] buff_ptr[*pput_ptr + 2])
唤醒阻塞生产者
up(pmtx_sem)
唤醒阻塞消费者
up(c_TG_sem)
} else if(r 2) {
down(prod_sem)
果生产者正放产品生产者阻塞
down(pmtx_sem)
写字符形式模拟生产者放产品 报告进程号放入字符存放位置
buff_ptr[*pput_ptr + 1] 'P'
buff_ptr[*pput_ptr] 'T'
sleep(rate)
printf(d供应商提供烟草c纸c\ngetpid()buff_ptr[*pput_ptr] buff_ptr[*pput_ptr + 1])
唤醒阻塞生产者
up(pmtx_sem)
唤醒阻塞消费者
up(c_TP_sem)
}
}
} else {
while(1){
int r rand() 3
if(r 0) {
down(prod_sem)
果生产者正放产品生产者阻塞
down(pmtx_sem)
写字符形式模拟生产者放产品 报告进程号放入字符存放位置
buff_ptr[*pput_ptr + 1] 'P'
buff_ptr[*pput_ptr + 2] 'G'
sleep(rate)
printf(d 供 应 商 提 供 纸 c 胶 水 c\ngetpid()buff_ptr[*pput_ptr +
1] buff_ptr[*pput_ptr + 2])
唤醒阻塞生产者
up(pmtx_sem)
唤醒阻塞消费者
up(c_PG_sem)
} else if(r 1) {
down(prod_sem)
果生产者正放产品生产者阻塞
down(pmtx_sem)
写字符形式模拟生产者放产品 报告进程号放入字符存放位置
buff_ptr[*pput_ptr] 'T'
buff_ptr[*pput_ptr + 2] 'G'
sleep(rate)
printf(d供应商提供烟草c胶水c\ngetpid()buff_ptr[*pput_ptr] buff_ptr[*pput_ptr + 2])
唤醒阻塞生产者
up(pmtx_sem)
唤醒阻塞消费者
up(c_TG_sem)
} else if(r 2) {
down(prod_sem)
果生产者正放产品生产者阻塞
down(pmtx_sem)
写字符形式模拟生产者放产品 报告进程号放入字符存放位置
buff_ptr[*pput_ptr + 1] 'P'
buff_ptr[*pput_ptr] 'T'
sleep(rate)
printf(d供应商提供烟草c纸c\ngetpid()buff_ptr[*pput_ptr] buff_ptr[*pput_ptr + 1])
唤醒阻塞生产者
up(pmtx_sem)
唤醒阻塞消费者
up(c_TP_sem)
}
}
}
return EXIT_SUCCESS
}


consumerc文件:

#include ipch
int main(int argcchar *argv[])
{
int rate
命令行第参数指定进程睡眠秒数调解进程执行速度
if(argv[1] NULL) rate atoi(argv[1])
else rate 3 指定 3 秒
享存 变量
buff_key 101 缓区键值
buff_num 3 缓区长度
cget_key 103 消费者取产品指针键值
cget_num 1 指针数
shm_flg IPC_CREAT | 0644 享存读写权限
获取缓区享存buff_ptr 指缓区首址
buff_ptr (char *)set_shm(buff_keybuff_numshm_flg)
获取消费者取产品指针cget_ptr 指索引址
cget_ptr (int *)set_shm(cget_keycget_numshm_flg)
信号量变量
prod_key 201 生产者步信号灯键值
cmtx_key 203 生产者互斥信号灯键值
c_PG_key 301消费者步信号灯键值
c_TP_key 302消费者互斥信号灯键值
c_TG_key 303消费者互斥信号灯键值
sem_flg IPC_CREAT | 0644 信号灯操作权限
生产者步信号灯初值设缓区量
sem_val 1
获取生产者步信号灯引标识存 prod_sem
prod_sem set_sem(prod_keysem_valsem_flg)
消费者初始产品取步信号灯初值设 0
sem_val 0
获取消费者步信号灯引标识存 cons_sem
c_PG_sem set_sem(c_PG_keysem_valsem_flg)
c_TP_sem set_sem(c_TP_keysem_valsem_flg)
c_TG_sem set_sem(c_TG_keysem_valsem_flg)
消费者互斥信号灯初值 1
sem_val 1
获取消费者互斥信号灯引标识存 pmtx_sem
cmtx_sem set_sem(cmtx_keysem_valsem_flg)
int pid1 pid2
pid1 fork()
if(pid1 0) {
循环执行模拟消费者断取产品
while(1){
果产品消费者阻塞
down(c_PG_sem)
果消费者正取产品消费者阻塞
down(cmtx_sem)
读字符形式模拟消费者取产品报告进程号获取字符读取位置
sleep(rate)
printf(d 吸烟者烟草 T纸c 胶水c开始吸烟\n
getpid()buff_ptr[*cget_ptr + 1]buff_ptr[*cget_ptr + 2])
唤醒阻塞消费者
up(cmtx_sem)
唤醒阻塞生产者
up(prod_sem)
}
} else {
pid2 fork()
if(pid2 0) {
循环执行模拟消费者断取产品
while(1){
果产品消费者阻塞
down(c_TP_sem)
果消费者正取产品消费者阻塞
down(cmtx_sem)
读字符形式模拟消费者取产品 报告进程号获取字符读取位置
sleep(rate)
printf(d 吸烟者胶水 G纸c 烟草c开始吸烟\n
getpid()buff_ptr[*cget_ptr + 1]buff_ptr[*cget_ptr])
唤醒阻塞消费者
up(cmtx_sem)
唤醒阻塞生产者
up(prod_sem)
}
} else {
循环执行模拟消费者断取产品
while(1){
果产品消费者阻塞
down(c_TG_sem)
果消费者正取产品消费者阻塞
down(cmtx_sem)
读字符形式模拟消费者取产品 报告进程号获取字符读取位置
sleep(rate)
printf(d 吸烟者纸 P胶水c 烟草c开始吸烟\n
getpid()buff_ptr[*cget_ptr + 2]buff_ptr[*cget_ptr])
唤醒阻塞消费者
up(cmtx_sem)
唤醒阻塞生产者
up(prod_sem)
}
}
}
return EXIT_SUCCESS
}



三 存页面置换算法实验
41 实验目
加深存储理解掌握虚拟存储器实现原理观察解重页面置换算法置换程练模拟算法编程技巧锻炼分析试验数力
42示例实验
421实验容
1示例实验程序中模拟两种置换算法:LRU 算法 FIFO 算法
2两种算法定意序列页面引串意帧实存块数组合测试显示页置换程
3统计报告置换算法情况次淘汰页号缺页次数(页错误数)缺页率较两种置换算法定条件优劣
4方便扩充页面置换算法更描述置换程示例实验程采 C++语言 Replace 类描述置换算法属性
422实验演示结果

43独立实验
431实验容
请示例实验程序中补充增强二次机会等置换算法模拟程序输入存页面引串实存帧数观察分析页面置换效果性 LRU FIFO 算法进行较改进示例实验程序够机产生存页面引串便动态观测种置换算法性
432实验步骤
4321算法设计
Clock()算法:
FIFO算法会常页面置换出避免问题该算法做简单修改:检查老页面R位果R位0页面老没立刻置换掉果R位1R位清0页面重新插入链表尾端然继续搜索第二次机会算法寻找时间间隔未访问页面果页面访问算法纯粹FIFO算法
EClock()算法:
需存中页面访问位A修改位M分4类
第类(A0M0)未访问未修改佳换页
第二类(A0M1)未访问修改次佳换页
第三类(A1M0)访问未修改访问
第四类(A1M1)访问修改访问
程序首先查找第类页面果换果没查找第二类页面置页面访问位0果换果没返回重新查找第类页面果换果没查找第二类页面定存该算法适某页面常修改场合
LFU()算法:
常页置换算法求页置换时置换引计数页常页应该较引次数页开始时次数类页会长时间留存中引计数寄存器定时右移位形成指数衰减均次数
MFU算法:
LFU算法相反常页置换算法认引次数页会常
4322开发调试程
建立vmrpcc程序代码写程序中 
建立名vmrphC语言头文件
建立项目理文件Makefile
输入make命令编译连接生成执行vmrp程序
执行程序
4323思考分析
433实验演示结果



434实验代码
vmrpcc文件:

#include vmrph
#include
#include

using namespace std

ReplaceReplace()
{
int i
设定总访问页数分配相应引页号淘汰页号记录数组空间
cout << Please input page numbers
cin >> PageNumber

ReferencePage new int[sizeof(int) * PageNumber]
EliminatePage new int[sizeof(int) * PageNumber]

输入引页号序列(页面走)初始化引页数组
cout << Please input reference page string

for (i 0 i < PageNumber i++)
cin >> ReferencePage[i]引页暂存引数组

设定存实页数(帧数)分配相应实页号记录数组空间(页号栈)
cout << Please input page frames
cin >> FrameNumber

PageFrames new int[sizeof(int) * FrameNumber]
}

Replace~Replace()
{
}

void ReplaceInitSpace(char * MethodName)
{
int i
cout << endl << MethodName << endl
FaultNumber0

引未开始1 表示引页
for (i 0 i < PageNumber i++)
EliminatePage[i] 1
for(i 0 i < FrameNumber i++)
PageFrames[i] 1
}

分析统计选择算法前输入页面走性
void ReplaceReport(void)
{
报告淘汰页序
cout << endl << Eliminate page

for(int i0 EliminatePage[i]1 i++)
cout << EliminatePage[i] <<

报告缺页数缺页率
cout << endl << Number of page faults << FaultNumber << endl
cout << setw(6) << setprecision(3)
cout << Rate of page faults << 100*(float)FaultNumber(float)PageNumber << <
}


旧未置换算法
void ReplaceLru(void)
{
int ijklnext
InitSpace(LRU)

循环装入引页
for(k0l0 k < PageNumber k++)
{
nextReferencePage[k]
检测引页前否已实存
for (i0 i {
if(next PageFrames[i])
{
引页已实存调整页记录栈顶
next PageFrames[i]
for(jij>0j)
PageFrames[j] PageFrames[j1]
PageFrames[0]next
break
}
}
if(PageFrames[0] next)
{
果引页已放栈顶缺页报告前存页号
for(j0 j if(PageFrames[j]>0)
cout << PageFrames[j] <<
cout << endl
continue 继续装入页
}
else
果引页未放栈顶缺页缺页数加 1
FaultNumber++

栈底页号记入淘汰页数组中
EliminatePage[l] PageFrames[FrameNumber1]
压栈
for(jFrameNumber1j>0j)
PageFrames[j] PageFrames[j1]
PageFrames[0]next 引页放栈顶
报告前实存中页号
for(j0 j if(PageFrames[j]>0)
cout << PageFrames[j] <<
报告前淘汰页号
if(EliminatePage[l]>0)
cout << > << EliminatePage[l++] << endl
else
cout << endl
}
分析统计选择算法前引页面走性
Report()
}


先进先出置换算法
void ReplaceFifo(void)
{
int ijklnext
InitSpace(FIFO)

循环装入引页
for(k0jl0 k < PageNumber k++)
{
nextReferencePage[k]
果引页已实存中报告实存页号
for (i0 i if(nextPageFrames[i])
break
if (i {
for(i0 i cout << PageFrames[i] <<
cout << endl
continue 继续引页
}

引页实存中缺页数加 1
FaultNumber++
EliminatePage[l] PageFrames[j] 先入页号记入淘汰页数组
PageFrames[j]next 引页号放先入页号处
j (j+1)FrameNumber 先入页号循环移
报告前实存页号淘汰页号
for(i0 i if(PageFrames[i]>0)
cout << PageFrames[i] <<
if(EliminatePage[l]>0)
cout << > << EliminatePage[l++] << endl
else
cout << endl
}
分析统计选择算法前引页面走性
Report()
}

void ReplaceClock(void)
{
int ijklnext
InitSpace(Clock)
循环装入引页
int flag[100]
for(i0i flag[i]0初始位0
for(k0jl0k {
nextReferencePage[k]
果引页已实存中报告实存页号
for(i0i if(nextPageFrames[i])
break
if(i {
flag[i]1
for(i0i cout< cout< continue 继续引页
}
引页实存中缺页数加 1
FaultNumber++
int a
for(a0a if(PageFrames[a]1)空余帧直接放入
{
PageFrames[a]next
break
}
if(aFrameNumber)
{
flag[a]1
for(i0i cout< cout< continue
}
int jj0
for(j0j if(flag[j]0)
{
jjj
break
}
else
{
flag[j]0
}
if(jFrameNumber)
jj0
flag[jj]1
EliminatePage[l]PageFrames[jj] 先入页号记入淘汰页数组
PageFrames[jj]next 引页号放先入页号处
报告前实存页号淘汰页号
for(i0i if(PageFrames[i]>0)
cout << PageFrames[i] <<
if(EliminatePage[l]>0)
cout << > << EliminatePage[l++] << endl
else
cout << endl
}
分析统计选择算法前引页面走性
Report()
}
void ReplaceEclock (void)
{
int ijklnext
InitSpace(Eclock)
循环装入引页
int flag[2][100]
for(j0j<2j++)
for(i0i flag[j][i]0
for(k0jl0k {
nextReferencePage[k]
果引页已实存中报告实存页号
for(i0i if(nextPageFrames[i])
break
if(i {
flag[0][i]1访问位
flag[1][i]0修改访问位
for(int kk0kk if(kki)
{
flag[0][i]0
}
for(i0i cout< cout< continue 继续引页
}
引页实存中缺页数加 1
FaultNumber++
int a
for(a0a if(PageFrames[a]1)
{
PageFrames[a]next
break
}
if(aFrameNumber)
{
flag[0][a]1
flag[0][a]0
for(i0i cout< cout< continue
}
int jj0jjj0flagg0
for(j0j if((flag[0][j] {
flaggj
jjflag[0][j]
jjjflag[1][j]
}
jjflagg
EliminatePage[l]PageFrames[jj] 先入页号记入淘汰页数组
PageFrames[jj]next 引页号放先入页号处
报告前实存页号淘汰页号
flag[0][jj]1
flag[1][jj]1
for(int kk0kk if(kkjj)
{
flag[0][i]0
}
for(i0i if(PageFrames[i]>0)
cout << PageFrames[i] <<
if(EliminatePage[l]>0)
cout << > << EliminatePage[l++] << endl
else
cout << endl
}
分析统计选择算法前引页面走性
Report()
}
void ReplaceLfu(void)
{
int ijklnext
InitSpace(Lfu)
循环装入引页
int flag[100]
for(i0i flag[i]0
for(k0jl0k {
nextReferencePage[k]
果引页已实存中报告实存页号
for(i0i if(nextPageFrames[i])
break
if(i {
flag[i]++
for(i0i cout< cout< continue 继续引页
}
引页实存中缺页数加 1
FaultNumber++
int a20jj
for(a0a if(PageFrames[a]1)
{
PageFrames[a]next
break
}
if(aFrameNumber)
{
for(i0i cout< cout< continue
}
a20
for(j0j if(flag[j] {
aflag[j]
jjj
}
flag[jj]1
EliminatePage[l]PageFrames[jj] 先入页号记入淘汰页数组
PageFrames[jj]next 引页号放先入页号处
报告前实存页号淘汰页号
for(i0i if(PageFrames[i]>0)
cout << PageFrames[i] <<
if(EliminatePage[l]>0)
cout << > << EliminatePage[l++] << endl
else
cout << endl
}
分析统计选择算法前引页面走性
Report()
}
void ReplaceMfu(void)
{
int ijklnext
InitSpace(Mfu)
循环装入引页
int flag[100]
for(i0i flag[i]0
for(k0jl0k {
nextReferencePage[k]
果引页已实存中报告实存页号
for(i0i if(nextPageFrames[i])
break
cout< if(i {
flag[i]++
for(i0i cout< cout< continue 继续引页
}
引页实存中缺页数加 1
FaultNumber++
int a1jj
for(a0a if(PageFrames[a]1)
{
PageFrames[a]next
break
}
if(aFrameNumber)
{
for(i0i cout< cout< continue
}
a1
for(j0j if(flag[j]>a)
{
aflag[j]
jjj
}
flag[jj]1
EliminatePage[l]PageFrames[jj] 先入页号记入淘汰页数组
PageFrames[jj]next 引页号放先入页号处
报告前实存页号淘汰页号
for(i0i if(PageFrames[i]>0)
cout << PageFrames[i] <<
if(EliminatePage[l]>0)
cout << > << EliminatePage[l++] << endl
else
cout << endl
}
分析统计选择算法前引页面走性
Report()
}


int main(int argcchar *argv[])
{

Replace * vmpr new Replace()
vmpr>Lru()
vmpr>Fifo()
vmpr>Clock()
vmpr>Eclock()
vmpr>Lfu()
vmpr>Mfu()

return 0
}

vmrph文件:

#include
#include
#include

class Replace
{

public
Replace()
~Replace()
void InitSpace(char * MethodName) 初始化页号记录
void Report(void) 报告算法执行情况
void Fifo(void) 先进先出算法
void Lru(void) 旧未算法
void Clock(void) 时钟(二次机会)置换算法
void Eclock(void) 增强二次机会置换算法
void Lfu(void) 常置换算法
void Mfu(void) 常置换算法
private
int * ReferencePage 存放访问页号
int * EliminatePage 存放淘汰页号
int * PageFrames 存放前正实存中页号
int PageNumber 访问页数
int FrameNumber 实存帧数
int FaultNumber 失败页数

}

四 磁盘移臂调度算法实验
51 实验目
加深操作系统设备理技术解 体验磁盘移臂调度算法重性掌握种重磁盘移臂调度算法练模拟算法编程技巧锻炼研究分析试验数力
52示例实验
521实验容
1示例实验程序中模拟两种磁盘移臂调度算法:SSTF 算法 SCAN 算法
2两种算法定意序列磁盘请求序列显示响应磁盘请求程
3统计报告算法情况响应请求序移臂总量较两种算法定条件优劣
4方便扩充磁盘移臂调度算法更描述磁盘移臂调度程示例实验程序采 C++语言 DiskArm 类描述磁盘移臂调度算法属性
522实验演示结果

53独立实验
531实验容
请示例实验程序中补充 SCANCSCANLOOK 磁盘移臂调度算法模拟程序输入磁盘柱面请求序列观察分析调度效果性FCFS SSTF 算法进行较改进示例实验程序够机产生磁盘柱面请求序列便动态观测种调度算法性
532实验步骤
5321算法设计
扫描算法(SCAN): 
磁臂磁盘端端移动时磁头移柱面时处理位该柱面服务请求达端时磁头改变方处理继续磁头磁盘回扫描时称电梯算法算法基克服短寻道时间优先算法服务集中中间磁道响应时间变化较缺点具短寻道时间优先算法优点吞吐量较均响应时间较摆动式扫描方法两侧磁道访问频率低中间磁道
例中开始时53号柱面执行操作读写磁头移动臂方里外趋37号柱面位置访问53号柱面操作结束臂移动方柱面37号柱面应先37号柱面访问者服务然14号柱面访问者服务柱面0时磁头会调转方磁盘端移动处理柱面656798122124183
循环扫描算法(CSCAN):
循环扫描算法扫描算法改进果磁道访问请求均匀分布磁头达磁盘端反运动时落磁头访问请求相较少磁道刚处理磁盘端请求密度相高访问请求等时间较长解决种情况循环扫描算法规定磁头单移动例里外移动磁头移外访问磁道时磁头立返回里欲访磁道磁道号紧接着磁道号构成循环进行扫描
例中已假定读写前位置53号柱面53号柱面继续外扫描次37140柱面访问者服务时移动臂已外柱面立返回199号柱面重新扫描次183124122986765号柱面访问者服务
LOOK算法:
LOOK算法SCAN算法种改进LOOK算法言磁头样圈外圈磁道间返移动LOOK算法发现移动方请求时立改变移动方SCAN算法需移动外圈圈时改变移动方
5322开发调试程
新建文件夹中建立 daskh 文件
新建文件夹中建立 daskcc 文件
新建文件夹中建立 Makefile 文件
执行 make 命令编译连接生成执行文件 dask
执行 dask 命令输入前道号前寻道方前请求寻道数前请求寻
道道号串
5323思考分析
SCANCSCAN磁盘负荷较系统会执行更产生饿死问题
SCAN算法基克服短寻道时间优先算法服务集中中间磁道响应时间变化较缺点具短寻道时间优先算法优点吞吐量较均响应时间较摆动式扫描方法两侧磁道访问频率低中间磁道
533实验演示结果

534实验代码
daskcc文件
#include daskh

DiskArmDiskArm(){

int i

输入前道号

cout << Please input Current cylinder

cin >> CurrentCylinder

磁头方输入 0 表示道号移动1 表示道号移动

cout << Please input Current Direction (01)

cin >> SeekDirection

输入磁盘请求数请求道号

cout << Please input Request Numbers

cin >> RequestNumber

cout << Please input Request cylinder string

Request new int[sizeof(int) * RequestNumber]

Cylinder new int[sizeof(int) * RequestNumber]

for (i 0 i < RequestNumber i++)

cin >> Request[i]

}

DiskArm~DiskArm(){

}

初始化道号寻道记录

void DiskArmInitSpace(char * MethodName)

{

int i

cout << endl << MethodName << endl

SeekNumber 0

SeekChang 0

for (i 0 i < RequestNumber i++)

Cylinder[i] Request[i]

}

统计报告算法执行情况

void DiskArmReport(void){

cout << endl

cout << Seek Number << SeekNumber << endl

cout << Chang Direction << SeekChang << endl << endl

}

先先服务算法

void DiskArmFcfs(void)

{

int Current CurrentCylinder

int Direction SeekDirection

InitSpace(FCFS)

cout << Current

for(int i0 i
if(((Cylinder[i] > Current) && Direction)||((Cylinder[i] < Current) && Direction)){

需调头

SeekChang++ 调头数加 1

Direction Direction 改变方标志

报告前响应道号

cout << endl << Current << > << Cylinder[i]

}

else 需调头报告前响应道号

cout << > << Cylinder[i]

累计寻道数响应道号变前道号

SeekNumber + abs(Current Cylinder[i])

Current Cylinder[i]

}

报告磁盘移臂调度情况

Report()

}

void DiskArmSstf(void)

{

int Shortest

int Distance 999999

int Direction SeekDirection

int Current CurrentCylinder

InitSpace(SSTF)

cout << Current

for(int i0 i
查找前道号

for(int j0 j
if(Cylinder[j] 1) continue 1 表示已响应

if(Distance > abs(CurrentCylinder[j])){

道号前距离道号前距离

Distance abs(CurrentCylinder[j])

Shortest j

}

}

if((( Cylinder[Shortest] > Current) && Direction)||(( Cylinder[Shortest] < CurrentCylinder) && Direction)){

需调头

SeekChang++ 调头数加 1

Direction Direction 改变方标志

报告前响应道号

cout << endl << Current << > << Cylinder[Shortest]

}

else 需调头报告前响应道号

cout << > << Cylinder[Shortest]

累计寻道数响应道号变前道号

SeekNumber + abs(Current Cylinder[Shortest])

Current Cylinder[Shortest]

恢复距离销响应道号

Distance 999999

Cylinder[Shortest] 1

}

Report()

}



电梯调度算法

void DiskArmScan(void){

int Current CurrentCylinder

int Direction SeekDirection

InitSpace(SCAN)
cout << Current 印出前道号


for(int i0 i
int index1

int Distance 999999

for(int j0j
if(Cylinder[j]1)

continue

else if((Direction0&&Cylinder[j]
||(Direction1&&Cylinder[j]>Current&&(Cylinder[j]Current)
indexj

Distanceabs(CurrentCylinder[j])

}

}



if(Direction0){

if(index1){

cout<<><
SeekNumber+CurrentCylinder[index]

CurrentCylinder[index]

Cylinder[index]1

}else{

cout<<><<0<
SeekNumber+Current

DirectionDirection

cout<<0

Current0

SeekChang++

i

}



}

else if(Direction1){

if(index1){

cout<<><
SeekNumber+Cylinder[index]Current

CurrentCylinder[index]

Cylinder[index]1

}else{

cout<<><<199<
SeekNumber+199Current

DirectionDirection

cout<<199

Current199

SeekChang++

i

}

}



}

报告磁盘移臂调度情况

Report()

}

LOOK调度算法

void DiskArmLook(void){

int Current CurrentCylinder

int Direction SeekDirection

InitSpace(Look)

cout << Current



for(int i0 i
int index1

int Distance 999999

for(int j0j
if(Cylinder[j]1)

continue

else if((Direction0&&Cylinder[j]
||(Direction1&&Cylinder[j]>Current&&(Cylinder[j]Current)
indexj

Distanceabs(CurrentCylinder[j])

}

}



if(Direction0){

if(index1){

cout<<><
SeekNumber+CurrentCylinder[index]

CurrentCylinder[index]

Cylinder[index]1

}else{

cout<
DirectionDirection

SeekChang++

i

}



}

else if(Direction1){

if(index1){

cout<<><
SeekNumber+Cylinder[index]Current

CurrentCylinder[index]

Cylinder[index]1

}else{

cout<
DirectionDirection

SeekChang++

i

}

}



}

报告磁盘移臂调度情况

Report()

}

CScan调度算法

void DiskArmCScan(void)

{

int Current CurrentCylinder

int Direction SeekDirection

InitSpace(CScan)

cout << Current

for(int i0 i
int index1

int Distance 999999

for(int j0j
if(Cylinder[j]1)

continue

else if((Direction0&&Cylinder[j]
||(Direction1&&Cylinder[j]>Current&&(Cylinder[j]Current)
indexj

Distanceabs(CurrentCylinder[j])

}

}



if(Direction0){

if(index1){

cout<<><
SeekNumber+CurrentCylinder[index]

CurrentCylinder[index]

Cylinder[index]1

}else{

cout<<><<0<
SeekNumber+Current

Current199

cout<<0>199

SeekChang++

i

}



}

else if(Direction1){

if(index1){

cout<<><
SeekNumber+Cylinder[index]Current

CurrentCylinder[index]

Cylinder[index]1

}else{

cout<<><<199<
SeekNumber+199Current

Current0

SeekChang++

i

}

}

}

Report()

}

程序启动入口

int main(int argcchar *argv[]){

建立磁盘移臂调度类

DiskArm *dask new DiskArm()

较分析 FCFS SSTF 两种调度算法性

dask>Fcfs()

dask>Sstf()

dask>Scan()

dask>CScan()

dask>Look()

}


daskh文件:
#include

#include

#include

#include

#include

using namespace std

class DiskArm{

public

DiskArm()

~DiskArm()

void InitSpace(char * MethodName) 初始化寻道记录

void Report(void) 报告算法执行情况

void Fcfs(void) 先先服务算法

void Sstf(void) 短寻道时间优先算法

void Scan(void) 电梯调度算法

void CScan(void) 均匀电梯调度算法

void Look(void) LOOK 调度算法

private

int *Request

磁盘请求道号

int *Cylinder

工作柱面道号号

int RequestNumber

磁盘请求数

int CurrentCylinder

前道号

int SeekDirection

磁头方

int SeekNumber

移臂总数

int SeekChang

磁头调头数

}




文档香网(httpswwwxiangdangnet)户传

《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 香币 [ 分享文档获得香币 ]

该文档为用户出售和定价!

购买文档

相关文档

操作系统进程管理实验报告

操作系统进程管理实验报告实验一 进程管理1.实验目的:(1)加深对进程概念的理解,明确进程和程序的区别;(2)进一步认识并发执行的实质;(3)分析进程争用资源的现象,学习解决进程互斥的方法;(4)了解Linux系统中进程通信的基本原理。2.实验预备内容(1)阅读Linux的sched.h源码文件,加深对进程管理概念的理解;(2)阅读Linux的fork()源码文件,分析进程的

文***享 1年前 上传365   0

驱动程序实验报告操作系统课程设计报告

操作系统课程设计报告班级: 计科 姓名: 学号: 老师: 时间:2012年X月X日一、设计目的操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。本课程设计的目的综合应用学生所学

文***享 1年前 上传301   0

操作系统实验报告C语言实现银行家算法

实 验 报 告题 目名 称C语言实现银行家算法院 系信息科学与工程学院班 级完成时间指导老师本次实验成绩组长联系电话邮件地址组员(姓名,学号)主要任务程序算法的编写、实现、运行调试组员(姓名,学号)主要任务实验报告的完成组员(姓名,学号)主要任务实验报告的完成

文***品 3年前 上传471   0

计算机操作系统内存分配实验报告

计算机操作系统内存分配实验报告一、实验目的熟悉主存的分配与回收。理解在不同的存储管理方式下,如何实现主存空间的分配与回收。掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理方式及其实现过程。二、实验内容和要求主存的分配和回收的实现是与主存储器的管理方式有关的。所谓分配,就是解决多道作业或多进程如何共享主存空间的问题。所谓回收,就是当作业运行完成时将作业或进程所占的主存空间归还

文***品 3年前 上传609   0

大二下学期期未总结

大二下学期期未总结  大二下学期即将结束,大学生活已经过半,我班在各方面都取得了不错的成绩,广大同学依然延续着团结,活泼,互助奋进的班风,并逐渐走向成熟。   一,班级工作方面   1.班级气氛和谐融洽,同学们具有活力,朝气蓬勃,有上进心,各同学有自己的人生理想及职业规划,同学们奋斗意识较强。   2.各班干部分工明确,每次工作都能默契配合,出色的完成各自的工作,深的同学们的好评

y***g 11年前 上传403   0

大二下学期金工实习报告

大二下学期金工实习报告  金工实习报告  大二下学期刚开始,我们专业便与众不同起来,开学的第十个周全部是金工实习。说真的,刚开始的时候,感觉时间好漫长呢,四个周呀,我们什么时候才能熬过这实习的日子。可是,转眼间,最后一个周已经来到了,5月13号即将向我们招手,不知怎么的,原来一直盼望的5月13号,可是当这一天真的来临的时候,我们突然对实习产生一种强烈的难以割舍的情愫,真的不愿和你分开――

f***u 10年前 上传571   0

大二下学期期未总结

大二下学期期未总结第一篇:大二下学期期未总结大二下学期即将结束,大学生活已经过半,我班在各方面都取得了不错的成绩,广大同学依然延续着团结,活泼,互助奋进的班风,并逐渐走向成熟。 一,班级工作方面 1.班级气氛和谐融洽,同学们具有活力,朝气蓬勃,有上进心,各同学有自己的人生理想及职业规划,同学们奋斗意识较强。 2.各班干部分工明确,每次工作都能默契配合,出色的完成各自的工作,深

l***e 12年前 上传493   0

备战操作系统

操作系统 操作系统概念:操作系统是控制其他程序运行,管理资源并为用户提供操作界面的系统软件的集合。 操作系统的功能有:处理机管理、存储管理、外围设备管理(又称I/0设备管理)、文件管理和操作系统接口 操作系统的基本特征有:异步性、虚拟性、并发性和共享性 进程 进程的概念:进程是一个可拥有资源的独立单位,又是一个可独立和分配的基本单位。 进程的组成:由程序段,相关的数据段和进程控制块(

t***u 9年前 上传7531   0

大二下学期班级工作总结

大二下学期班级工作总结  回顾过去的半年,我们市场营销0601班积极进取,开拓创新,工作学习各方面都有了较为满意的成绩。为了在今后的学习工作中更多地取得成绩,避免失误,现将我班在大二这下学期的活动总结如下,以继承优点,避免错误,为我系的发展做出我们的贡献。  学习方面:   我班保持良好的课堂学习气氛和积极进取的学习精神,在课堂上不断吸取讲师所传授的文化知识,积极完成任务。课堂下阅读

己***起 9年前 上传407   0

大二班下学期班级环境亮点

大二班主题名称:《人与自然和谐,环保再利用》,习近平总书记讲话中提出“绿水青山就是金山银山。”我们班结合习近平总书记的精神和《指南》要求,以幼儿为中心,以经验为基础,引导幼儿运用多种美术手段表现环保特色,激发幼儿的表现欲,从而发展幼儿表现美,创造美的能力。

鱼***9 6年前 上传1734   0

大二下学期班级工作总结

大二下学期班级工作总结  眨眼间,一个学期又过去了。相对比大一时候,工作方面会少一些,但学习方面变的相对地忙碌点儿。班里的同学不再是盲目地参加学院的一些文娱活动,他们更注重于学习方面。同学们更关注考证的相关信息,可能对此,很多同学对班中的一些活动缺乏兴趣,更有些时候会有缺席现象。其实我也可以了解,因为在大学期间,同学们更多的是为自己着想,对其他事物不抱有关心的心态,说得清楚点儿,就是自私心比

b***y 8年前 上传529   0

大二班下学期工作计划

大二班下学期工作计划  新的学期开始了,为了更好地开展本学期的工作,现将我班工作计划制定如下:    一、班级情况分析:    我班现有幼儿45名,新生9名。通过中班一学年的活动和锻炼,每个幼儿在各方面都有了不同程度的发展。主要表现在生活自理能力,有序地穿脱、整理衣物、鞋袜。能正确使用手绢、毛巾、便纸。大部分幼儿逐步养成了认真的洗手、喝水,安静愉快进餐和物归原处的好习惯。另外,通过区

读***家 8年前 上传326   0

2016年大二下学期期未总结

2016年大二下学期期未总结  大二下学期即将结束,大学生活已经过半,我班在各方面都取得了不错的成绩,广大同学依然延续着团结,活泼,互助奋进的班风,并逐渐走向成熟。   一,班级工作方面   1.班级气氛和谐融洽,同学们具有活力,朝气蓬勃,有上进心,各同学有自己的人生理想及职业规划,同学们奋斗意识较强。 各班干部分工明确,每次工作都能默契配合,出色的完成各自的工作,深的同学们的好评。

花***7 8年前 上传294   0

2021年大二下学期个人总结

 2021年大二下学期个人总结撰写人:___________日 期:___________2021年大二下学期个人总结时间过得真快,转眼间又快到这个学期的最后阶段了。回顾一下过去,刚来到佛山大学报到的那一天还历历在目,怪不得人们常说日月如梳!总结一下这个学期的各方面情况,大概可以归纳以下几个要点。一、在学习上,比起第一学期有了很大的进步,各次测验的成绩也明显比以前有所提高。上

k***8 3年前 上传424   0

大二下学期学习工作计划

大二下学期学习工作计划  屈指一数我们的大学时光只剩下仅仅的2年半了,用自己在大学过去的这1年半来说,2年半可能过的比我们这走过的一年半还要快的多,时间匆匆远去,留下的是我们肩上的责任,我们的奋斗也不言而喻的更加艰难了。   新的一年,新的面貌!新学期,新气象!首先我恭祝大家新年快乐,心想事成。希望080912每位成员都能尽己之能共同营造一个更好的学习氛围和大家共同建设班级的良好局面!班

0***0 10年前 上传349   0

大二下学期班级工作计划

大二下学期班级工作计划  新的学期又开始了,时间过的很快,转眼间,我们已经进入大二下学期了。在这近2年的时间里,我们班的同学一起努力,取得了不错的成绩,班级同学彼此间的感情也不断加深。作为班长,我决心尽我的力量为同学们服务。  在一个班级中,如果全班同学都拧成一股绳,劲往一处使,那么没有什么事情是不能办到的。同时,在这样的氛围中,也将更容易调动大家的学习积极性以及积极参与社会活动的热情。

猎***虎 10年前 上传452   0

山东大学服务省会济南工作计划山东大学服务省会济南工作计划

山东大学服务省会济南工作计划山东大学服务省会济南工作计划山东大学是一所诞生于济南、主要依托于济南而成长壮大的百年名校。        2000年7月,原山东大学、山东医科大学和山东工业大学三校合并组建新山东大学以来,随着教育理念的不断更新和学术实力的不断提高,学校以“担承社会责任,服务山东发展”为己任,越来越多地参与到山东省经济社会发展之中,全面实施了“山东大学服务山东行动方案”,使

是***e 11年前 上传476   0

操作系统习题及答案

操作系统习题与答案(经典型)第一章 引言(一)单项选择题1操作系统是计算机系统的一种( B )。A.应用软件 B.系统软件 c.通用软件 D.工具软件2.操作系统目的是提供一个供其他程序执行的良好环境,因此它必须使计算机(D ) A.使用方便 B.高效工作 C.合理使用资源 D.使用方便并高效工作3.允许多个用户以交互方式使用计算机的操作系统是( A )。 A.

文***品 3年前 上传813   0

高级操作系统试题

高级操作系统试题2.请求驱动式令牌传递方法中,若pi发出request消息后久未获得Token,该怎么处理?若引 入时戳,该算法应做何修改?答:在请求驱动式令牌传递方法中,或pi发出的request消息后久未获得Token,应该决定是站点故障还是Token丢失,需要有对应逻辑环重构方法和Token生成方法。可以引入时时戳增加算法的强健性,具体如下:(1)当request消息后久未获得

文***品 4年前 上传902   0

《操作系统》在线作业

《操作系统》在线作业

学***询 4年前 上传3330   0

操作系统实验心得

操作系统实验心得  每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。所以在这两周的课设中,熬了2个通宵,生物钟也严重错乱了。但是每完成一个任务我都兴奋不已。一开始任务是任务,到后面任务就成了自己的作品了。总体而言我的课设算是达到了老师的基本要求。总结一下有以下体会。  1

薛***帅 12年前 上传983   0

操作系统知识整理

操作系统是位于硬件层之上,所有其他系统软件层之下的一个系统软件,使得管理系统中的各种软件和硬件资源得以充分利用,方便用户使用计算机系统。

q***t 5年前 上传1685   0

操作系统 七次实验报告 常用页面置换算法模拟实验

操作系统课程第七次实验报告姓名学号系计算机任课教师指导教师评阅教师实验地点 综合楼B102 实验时间2012-9-26实验课表现出勤和个人表现Q1(15+15(组长评分)=30分)得分:实验总分(Q1+Q2+Q3+Q4)实验完成情况Q2(45分(组长与教师评分的加权平均))得分:实验编号与实验名称:实验七、常用页面置换算法模拟

文***品 3年前 上传746   0

操作系统实习报告样本

操作系统实习报告样本  1 操作系统实习报告内容(1)    基本信息:完成人姓名、学号、报告日期(2)    实习内容(3)    实习目的(4)    实习题目(5)    设计思路和流程图(6)    主要数据结构及其说明(7)    源程序并附上注释(8)    程序运行时的初值和运行结果(9)    实习体会:实习中遇到的问题及解决过程、实习中产生的错误及原因分析、实习的体会及收获

q***9 9年前 上传576   0

Windows操作系统及其应用

Windows操作系统及其应用一. Windows操作系统的若干常识1、 Windows操作系统的主要功能是_B_____。A.实现软、硬件转换B.管理系统所有的软、硬件C.把源程序转换为目标程序D.进行数据处理 [解析]操作系统属于系统软件,它的主要功能是:管理系统所有的软件和硬件资源。2、 Windows XP 系统是___C___。(请看解析)

豆***2 4年前 上传799   0