计算机操作系统教程实验指导(第2版)

计算机操作系统教程实验指导(第2版)
计算机操作系统教程实验指导(第2版)

1. 编程管理文件makefike

filsys: main.o ingetput.o iallfre.o ballfre.o name.o access.o log.o close.o creat.o delete.o dir.o open.o rdwt.o format.o install.o halt.o cc-o filsys main.o

ingetput.o iallfre.o ballfre.o name.o access.o log.o close.o creat.o delete.o dir.o open.o rdwt.o format.o install.o halt.o

main.o: main.c filesys.h cc-c main.c

igetput.o: igetput.c filesys.h cc-c igetput.c

iallfre.o: iallfre.c filesys.h cc-c iallfre.c

ballfre.o: ballfre.c filesys.h cc-c ballfre.c

name.o: name.c filesys.h cc-c name.c

accesse.o: access.c filesys.h cc-c access.c

log.o: log.c filesys.h cc-c log.c

close.o: close.c filesys.h cc-c close.c

creat.o: creat.c filesys.h cc-c creat.c

delete.o: delete.c filesys.h cc-c delete.c

dir.o: dir.c filesys.h cc-c dir.c

open.o: open.c filesys.h cc-c open.c

rdwt.o: rdwt.c filesys.h cc-c rdwt.c

format.o: format.c filesys.h cc-c format.c

install.o: install.c filesys.h cc-c install.c

halt.o: halt.c cc-c halt.c

2.头文件filesye.h

#define BLOCKSIZE 512

#define SYSOPENFILE 40

#define DIRNUM 128

#define PWDSIZ 14

#define PWDNUM 12

#define NOFILE 20

#define NADDR 10

#define NHINO 128

#define USERNUM 10

#define DINODESIZ 32

#define FILEBLK 512

#define NICFREE 50

#define NICNOD 50

#define DINODESTART 2*BLOCKSIZ

#define DATASTART(2+DINODEBLK)*BLOCKSIZ #define DIEMPTY 00000

#define DIFILE 01000

#define DIDIR 02000

#define UDIREAD 00001

#define UDIWRITE 00002

#define UDIEXICUTE 00004

#define GDIREAD 00010

#define GDIWRITE 00020

#define GDIEXICUTE 00040

#define ODIREAD 00100

#define ODIWRITE 00200

#define ODIEXICUTE 00400

#define READ 1

#define WRITE 2

#define EXICUTE 3

#define DEFAULTMODE 00777

#define IUPDATE 00002

#define SUPDATE 00001

#define FREAD 00001

#define FWRITE 00002

#define FAPPEND 00004

#define DISKFULL 65525

#define SEEL..SET 0

/*文件系统数据结构*、struct inode{

struct inode *i_frow;

struct inode *i_back;

char i_flag;

unsigned int i_ino;

unsigned int i_count;

unsigned short di_number;

unsigned short di_moder;

unsigned short di_uid;

unsigned short di_gid;

unsigned short di_size;

unsigned int di_addr[NADDR];

};

struct dinode{

unsigned short di_number;

unsigned short di_moder;

unsigned short di_uid;

unsigned short di_gid;

unsigned long di_size;

unsigned int di_addr[NADDR];

};

struct direet{

char d_name[DIRSIZ];

unsigned int d_ino;

};

struct filsys{

unsigned short s_size;

unsigned long s_fsize;

unsigned int s_nfree;

unsigned short s_pfree;

unsigned int s_free[NICFREE];

unsigned int s_ninode;

unsigned short s_pinode;

unsigned int s_inode[NICINOD];

unsigned int s_rinode;

char s_fmod;

};

struct pwd{

unsigned short p_uid;

unsigned short p_gid;

char pssword[PWDSIZE];

};

strcut dir{

struct direct direct[DIRNUM];

int size;

};

struct hinode{

struct inode * i_forw;

};

struct user{

unsigned short u_default_mode;

unsigned short u_uid;

unsigned short u_gid;

unsigned short u_ofile[NOFILE];

};

/*下为全局变量*/

extern struct hinode hinode[NHINO];

extern struct dir dir;

extern struct filesys_ofile[SYSOPENFILE]; extern struct filsys filsys;

extern struct pwd pwd{PWDNUM]; extern FILE *fd;

extern struct inode *cur_path_inode; extern int user_id;

extern struct inode *iget()

extern iput();

extern unsigned int balloc();

extern bfree();

extern struct inode *ialloc();

extern ifree();

extern unsigned int namei();

extern unsigned short iname();

extern unsigned int access();

extern _dir();

extern mkdir();

extern chdir();

extern unsigned short open();

extern creat();

extern unsigned int read();

extern unsigned int write();

extern int login();

extern install();

extern format();

extern close();

extern halt();

3.主程序main()(文件名main.c)

#include

#include"filesys.h"

struct hinode hinode[NHINO];

struct dir dir;

struct filesys_ofile[SYSOPENFILE];

struct filsys filsys;

struct pwd pwd[PWDNUM];

struct user user[USERNUM];

FILE *fd;

struct inode *cur_path_inode;

int uer_id;

main()

{

unsigned short ab_fd1, ab_fd2, ab_fd3, ab_fd4;

unsigned short bhy_fd1;

char *buf;

printf("\nDo you want to format the disk\n");

if (getchar()=='y')

printf("\nFormat will erase all context on the disk\n"); if (getchar()=='y')

format();

install();

_dir();

long(2118, "abcd");

user_id=0;

mkdir("a2118");

chdir("a2118");

wj_fd1=creat(2118,"ab_file0.c",01777); buf=(char*)malloc(BLOCKSIZ*6+5); write(ab_fd1,buf,BLOCKSIZ*6+5); close(user_id,ab_fd1);

free(buf);

mkdir("subdir");

chdir("subdir");

wj_fd2=creat(2118,"file1.c",01777);

buf=(char*)malloc(BLOCKSIZ*4+20); write(ab_fd2,buf,BLOCKSIZ*4+20); close(user_id,ab_fd2);

free(buf);

chdir("..");

ab_fd3=creat(2118,"_file2.c",01777);

buf=(char*)malloc(BLOCKSIZ*10+255); write(ab_fd3,buf,BLOCKSIZ*3+255); close(ab_fd3);

free(buf);

delete("ab_file0.c");

ab_fd4=creat(2118,"ab_file3.c",01777); buf=(char*)malloc(BLOCKSIZ*8+300); write(ab_fd4,buf,BLOCKSIZ*8+300); close(ab_fd4);

free(buf);

ab_fd3=open(2188,"ab_file2.c",FAPPEND);

buf=(char*)malloc(BLOCKSIZ*3+100);

write(ab_fd3,buf,BLOCKSIZ*3+100);

close(ab_fd3);

free(buf);

_dir();

chdir("..");

logout();

halt();

}

4.初始化磁盘格式程序format()(文件名format.c)

#include

#include"filesys.h"

format()

{

struct inode *inode;

struct direct dir_buf[BLOCKSIZ/(DIRSIZ+2)];

struct pwd passwd [BLOCKSIZ/(PWDSIZ+4)];

/* {

{2116,03,"dddd"};

{2117,03,"bbbb"};

{2118,04,"abcd"};

{2119,04,"cccc"};

{2220,05,"eeee"};

};

*/

struct filsys;

unsigned int block_buf[BLOCKSIZ/sizeof(int)];

char *buf;

int i,j;

/*creat the file system file */

fd=fopen("filesystem","r+w+b");

buf=(char * )malloc(DINODENLK+FILEBLK+2)*BLOCKSIZ*sizeof(char)); if(buf==NULL)

{

printf("\nfile system file creat failed!!!\n");

exit(0);

}

fseek(fd,0,SEEK_SET);

fwrite(buf,1,(DINODENLK+FILEBLK+2)*BLOCKSIZ*sizeof(char),fd);

/* 0.initialize the passwd*/

passwd[0].p_uid=2116; passwd[0].p_gid=03;

strcpy(passwd[0].password, "dddd");

passwd[1].p_uid=2117; passwd[1].p_gid=03;

strcpy(passwd[1].password, "bbbb");

passwd[2].p_uid=2118; passwd[2].p_gid=04;

strcpy(passwd[2].password, "abcd");

passwd[3].p_uid=2119; passwd[3].p_gid=04;

strcpy(passwd[3].password, "cccc");

passwd[4].p_uid=2220; passwd[4].p_gid=05;

strcpy(passwd[4].password, "eeee");

/*1. Creat the main directory and its sub dir etc and the file password*/

inode=iget(0); /*0 empty dinode id */

inode—>di_moder=DIEMPTY;

iput(inode);

inode=iget(1); /*1 main dir id */

inode—>di_number=1;

inode—>di_moder=DEFAULTMODE | DIDIR;

inode—>di_size=3*(DIRSIZ+2);

inode—>di_addr[0]=0; /* block 0# is used by the main directory*/ strcpy(dir_buf[0].d_name,"..");

dir_buf[0].d_ino=1;

strcpy(dir_buf[1].d_name,"..");

dir_buf[1].d_ino=1;

strcpy(dir_buf[2].d_name,"etc");

dir_buf[2].d_ino=2;

fseek(fd,DATASTART,SEEK_SET);

fwrite(dir_buf,1,3*(DIRSIZ+2),fd);

iput(jnode);

inode=iget(2); /*2 etc dir id */

inode—>di_number=1;

inode—>di_moder=DEFAULTMODE | DIDIR;

inode—>di_size=3*(DIRSIZ+2);

inode—>di_addr[0]=1; /* block 1# is used by the main directory*/ strcpy(dir_buf[0].d_name,"..");

dir_buf[0].d_ino=1;

strcpy(dir_buf[1].d_name,".");

dir_buf[1].d_ino=2;

strcpy(dir_buf[2].d_name,"password");

dir_buf[2].d_ino=3;

fseek(fd,DATASTART,+BLOCKSIZ*1,SEEK_SET);

fwrite(dir_buf,1,3*(DIRSIZ+2),fd);

iput(jnode);

inode=iget(3); /*2 password id */

inode—>di_number=1;

inode—>di_moder=DEFAULTMODE | DIDIR;

inode—>di_size=BLOCKSIZ;

inode—>di_addr[0]=2; /* block 2# is used by themain file*/

for(i=5,i

{

passwd[i].p_uid=0;

passwd[i].p_gid=0;

strcpy(passwd[i].password," ");

}

fseek(fd,DATASTART,+BLOCKSIZ*2,SEEK_SET);

fwrite(passwd,1, BLOCKSIZ,fd);

iput(jnode);

/*2.initialize the superblock*/

fisys.s_isize=DINODEBLK;

fisys.s_fsize=FILEBLK;

fisys.s_ninode=DINODEBLK*BLOCKSIZ/DINODEBLK-4; fisys.s_nfree=FILEBLK-3;

for (i=0; i<=NICINOD; i++)

{ /* begin with 4,0,1,2,3, is used by main,etc,password */ fisys.s_inode[i]=4+i;

}

fisys.s_pinode=0;

fisys.s_rinode=NICINOD+4;

block_buf[NICFREE-1]=FILEBLK+1; /* FILEBLK +1 is a flag of end */ for ( i=0;i<=NICFREE-1; i++)

block_buf[NICFREE-2-i]=FILEBLK-i;

fseek (fd,DATASTART+BLOCKSIZ*(FILEBLK-NICFREE-1),SEEK_SET); fwrite (block_buf, 1, BLOCKSIZ, fd);

for ( i=FILEBLK-NICFREE-1;i>2; i-=NICFREE)

{

for ( j=0;j

{

block_buf[j]=i-j;

}

fseek (fd,DATASTART+BLOCKSIZ*(i-1),SEEK_SET);

fwrite (block_buf, 1, BLOCKSIZ, fd);

}

j=1;

for (i=i; i>2;i--)

{

filsys.s_free[NICFREE+i-j]=i;

}

filsys.s_pfree=NICFREE-j;

filsys.s_pinode=0;

fseek (fd,BLOCKSIZ),SEEK_SET);

fwrite(&filsys,1,sizeof(struct filsys),fd);

}

5.进入文件系统程序install()(文件名install.c) #include

#include

#include"filesys.h"

install()

{

int i,j;

/* 0.open the file column*/

fd=fopen("filesystem", "w+r+b");

if(fd=NULL)

{

printf("\nfilesys can not be loaded\n);

exit(0);

}

/* 1.read the filsys from the superblock */

fseek (fd, BLOCKSOZ, SEEK_SET);

fwrite(&filsys,1,,sizeof(struct filsys),fd);

/* 2.initialize the inode bash chain */

for (i=0; i

{

hinode[i].i_forw=NULL;

}

/* 3.initialize the sys_ofile*/

for (i=0; i

{

sys_ofile[i].f_count=0;

sys_ofile[i].f_inode=NULL;

}

/* 4.initialize the user */

for (i=0; i

{

user[i].u_uid=0;

user[i].u_gid=0;

for (j=0;j

{

user[i].u_ofile[j]=SYSOPENFILE+1;

}

}

/* 5. Read the main directory to initialize the dir */

cut_path_inode=iger(1);

dir.size=cur_path_inode->di_size/(DIRSIZ+2);

for (i=0; i

{

strcpy(dir.direct[i].d_name, " ");

dir.direct[i].d_ino=0;

}

for (i=0; i

{

fseek(fd,DATASTART+BLOCKSIZ*cut_path_inode->di_addr[i],SEEK_SET); fread(&dir.direct[(BLOCKSIZ/(DIRSIZ+2))*i],1,BLOCKSIZ,fd);

}

fseek(fd,DATASTART+BLOCKSIZ*cut_path_inode->di_addr[i],SEEK_SET); fread(&dir.direct[(BLOCKSIZ/(DIRSIZ+2))*i],1,

cut_path_inode->di_size%BLOCKSIZ,fd);

6.退出程序halt()(文件名halt.c)

#include

#include"filesys.h"

halt()

{

struct inode *inode;

int i.j;

/ * 1.write back the current dir */

chdir("..");

iput(cur_path_inode);

/ * 2. Free the u_ofile and sys_ofile and inode */ for(i=0;i

{

if(user[i].u_uid!=0)

{

for(j=0;j

{

if(user[i].u_ofile!=SYSOPENFILE+1)

{

close(user[i].u_ofile[j]);

user[i].u_ofile=SYSOPENFILE+1;

}

}

}

}

/ * 3. Write back the filesys to the disk */

fseek (fd, BLOCKSIZ, SEEK_SET);

fwrite (&filsys,1,sizeof(struct filsys), fd);

/ * 4.close the file system colum */

fclose(fd);

/ * 5. Say Goodebye to all the user */

printf("\nGood Bye. See you next time. Please turn off the switch\n"); exit (0);

7.获取释放i节点内容程序iget()iput()(文件名igetputc)

#include

#include "filesys.h"

struct inode * iget (dinodeid) /* iget() */

unsigned int dinodeid;

{

int existed=0.inodeid;

long addr;

struct inode *temp,*newinode;

inodeid=dinodeid%NHINO;

if (hinode [inodeid].i_forw==NULL) existed=0;

else

{

temp=hinode[inodeid].i_forw;

while (temp)

{

if(temp->i_ino==inodeid)

/* existed*/

{

existed=1;

temp->i_count++;

return temp;

}

/* not existed */

else

temp=temp->i_forw;

};

}

/* not existed */

/* 1. calculate the addr of the dinode in the file sys column */ addr=DINODESTART + dinodeid*DINODESIZ;

/* 2. malloc the new inode */

newinode=(struct inode *)malloc (sizeof(struct inode));

/* 3. read the dinode to the inode */

fseek(fd,addr,SEEK_SET);

fread(&(newinode->di_number),DINODESIZ,l,fd);

/* 4. put it into hinode [inodeid] queue */

newinode->i_forw=hinode [inodeid].i_forw;

newinode->i_back=newinode;

newinode->i_forw->i_back=newinode;

hinode[inodeid].i_forw=newinode;

/* 5. initialize the inode */

newinode->i_count=1;

newinode->i_flag=0; /* flag for not update */ newinode->i_ino=dinodeid;

return newinode;

}

iput(pinode) /* iput() */

struct inode *pinode;

{

long addr;

unsigned int block_num;

int i;

if (pinode->i_count>1)

{

pinode->i_count--;

return;

}

else

{

if (pinode->di_number!=0)

{

/* write back the inode */

addr=DINODESTART+pinode->i_ino*DINODESIZ;

fseek(fd,addr,SSEK_SET);

fwrite(&pinode->di_number,DINODESIZ,l,fd);

}

else

{

/* rm the inode & the block of the file in the disk */

block_num=pinode->di_size/BLOCKSIZ;

for (i=0;i

{

balloc(pinode->di_addr[i]);

}

ifree(pinode->i_ino);

};

/* free the inode in the memory */

if(pinode->i_forw==NULL)

pinode->i_back->i_forw=NULL;

else

{

pinode->i_forw->i_back=pinode->i_back;

pinode->i_back->i_forw=pinode->i_forw;

};

free(pinode);

};

}

8. I节点分配和释放函数ialloc()和ifree()(文件名iallfree.c) #include

#include"filesys.h"

static struct dinode block_buf[BLOCKSIZ/DINODESIZ];

struct inode*ialloc()

{

struct inode*temp_inode;

unsigned int cur_di;

int i,count,block_end_flag;

if(filsys.s_pinode==NICINOD) /* s_inode empty */

{

i=0;

count=0;

block_end_flag=1;

filsys.s_pinode=NICINOD-1;

cur_di=filsys.s_rinode;

while((count

{

if(block_end_flag)

{

fseek(fd,DINODESTART+cur_di*DINODESIZ);

fread(block_buf.l.BLOCK,fd);

block_end_flag=0;

i=0;

}

while (block_buf[i].di_mode--DIEMPTY)

{

cur_di++;

i++;

}

if(i==NICINOD)

block_end_flag=1;

else

{

filsys.s_inode[filsys.s_pinode--]=cur_di;

count++;

计算机操作系统实验课实验报告

实验报告 实验课程: 计算机操作系统学生姓名:XXX 学号:XXXX 专业班级:软件 2014年12月25日

目录 实验一熟悉Windows XP中的进程和线程.. 3实验二进程调度 (7) 实验三死锁避免—银行家算法的实现 (18) 实验四存储管理 (24)

实验一熟悉Windows XP中的进程和线程 一、实验名称 熟悉Windows XP中的进程和线程 二、实验目的 1、熟悉Windows中任务管理器的使用。 2、通过任务管理器识别操作系统中的进程和线程的相关信息。 3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。 三、实验结果分析 1、启动操作系统自带的任务管理器: 方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。

2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并 完成下表: 表一:统计进程的各项主要信息 3、启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。再

从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是任务管理器无法结束进程, 原因是该系统是系统进程。 4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所 有窗口最小化,看看你的计算机系统起来什么样的变化桌面上图标菜单都消失了、得到的结论explorer.exe是管理桌面图标的文件(说出explorer.exe进程的作用)。 5、运行“spy++.exe”应用软件,点击按钮“”,切换到进程显示栏上,查看进 程“explorer.exe”的各项信息,并填写下表: 进程:explorer.exe 中的各个线程

计算机操作系统习题答案

计算机操作系统习题答 案 Company Document number:WUUT-WUUY-WBBGB-BWYTT-1982GT

第一章操作系统概论 1.单项选择题 ⑴ B; ⑵ B; ⑶ C; ⑷ B; ⑸ C; ⑹ B; ⑺ B;⑻ D;⑼ A;⑽ B; 2.填空题 ⑴操作系统是计算机系统中的一个最基本的系统软件,它管理和控制计算机系统中的各种系统资源; ⑵如果一个操作系统兼有批处理、分时和实时操作系统三者或其中两者的功能,这样的操作系统称为多功能(元)操作系统; ⑶没有配置任何软件的计算机称为裸机; ⑷在主机控制下进行的输入/输出操作称为联机操作; ⑸如果操作系统具有很强交互性,可同时供多个用户使用,系统响应比较及时,则属于分时操作系统类型;如果OS可靠,响应及时但仅有简单的交互能力,则属于实时操作系统类型;如果OS在用户递交作业后,不提供交互能力,它所追求的是计算机资源的高利用率,大吞吐量和作业流程的自动化,则属于批处理操作系统类型; ⑹操作系统的基本特征是:并发、共享、虚拟和不确定性; ⑺实时操作系统按应用的不同分为过程控制和信息处理两种; ⑻在单处理机系统中,多道程序运行的特点是多道、宏观上并行和微观上串行。 第二章进程与线程 1.单项选择题

⑴ B;⑵ B;⑶ A C B D; ⑷ C; ⑸ C; ⑹ D; ⑺ C; ⑻ A; ⑼ C; ⑽ B; ⑾ D; ⑿ A; ⒀ D; ⒁ C; ⒂ A; 2.填空题 ⑴进程的基本状态有执行、就绪和等待(睡眠、阻塞); ⑵进程的基本特征是动态性、并发性、独立性、异步性及结构性; ⑶进程由控制块(PCB)、程序、数据三部分组成,其中PCB是进程存在的唯一标志。而程序部分也可以为其他进程共享; ⑷进程是一个程序对某个数据集的一次执行; ⑸程序并发执行与顺序执行时相比产生了一些新特征,分别是间断性、失去封闭性和不可再现性; ⑹设系统中有n(n>2)个进程,且当前不在执行进程调度程序,试考虑下述4种情况: ①没有运行进程,有2个就绪进程,n个进程处于等待状态; ②有一个运行进程,没有就绪进程,n-1个进程处于等待状态; ③有1个运行进程,有1个等待进程,n-2个进程处于等待状态; ④有1个运行进程,n-1个就绪进程,没有进程处于等待状态; 上述情况中不可能发生的情况是①; ⑺在操作系统中引入线程的主要目的是进一步开发和利用程序内部的并行性; ⑻在一个单处理系统中,若有5个用户进程,且假设当前时刻为用户态,则处于就绪状态的用户进程最多有4个,最少0个;

操作系统实验1

#include "stdio.h" #include #include #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0 struct pcb { /* 定义进程控制块PCB */ char name[10]; char state; int ntime; int rtime; struct pcb* link; }*ready=NULL,*p; typedef struct pcb PCB; void sort() /* 建立对进程进行优先级排列函数*/ { PCB *first, *second; int insert=0; if((ready==NULL)||((p->ntime)<(ready->ntime))) /*运行时间最短者,插入队首*/ { p->link=ready; ready=p; } else /* 进程比较运行时间优先级,插入适当的位置中*/ { first=ready; second=first->link; while(second!=NULL) { if((p->ntime)<(second->ntime)) /*若插入进程比当前进程所需运行时间短,*/ { /*插入到当前进程前面*/ p->link=second; first->link=p; second=NULL; insert=1; } else /* 插入进程运行时间最长,则插入到队尾*/ { first=first->link; second=second->link; } } if(insert==0) first->link=p; } }

计算机操作系统实训资料

计算机操作系统实验(训)指导书 学院:电子信息工程学院 班级:13计算机科学与技术本01班 学号: 姓名: 指导教师: 西安思源学院 电子信息工程学院

前言 操作系统是计算机科学与技术专业的一门重要的专业课,是一门实践性很强的技术课程。掌握操作系统原理、熟悉操作系统的使用是各层次计算机软硬件开发人员必不可少的基本技能。操作系统课程讲授理论原理比较容易,而如何指导学生进行实践则相对较难,导致学生不能深刻地理解操作系统的本质,也不能在实际中应用所学的操作系统理论知识及操作系统所提供的功能来解决实际问题。 本实验课程在操作系统原理课程教学中占有重要地位,目的是让学生及时掌握和巩固所学的基本原理和基础理论,加深理解。提高学生自适应能力,为将来使用和设计各类新的操作系统打下基础。 一般来说,学习操作系统分为以下几个层次: 1.学习并掌握操作系统的基本概念及原理,了解操作系统的实现机制。 2.掌握常用操作系统的使用、操作和维护,成为合格的系统管理员。 目前最常用的操作系统主要有UNIX、Linux、Windows等等。 3.通过分析操作系统源代码,掌握修改、编写操作系统的能力。开放源代码的操作系统Linux的出现为我们提供了机遇。 操作系统本身的构造十分复杂,如何在有效的时间内,使学生既能了解其实现原理又能对原理部分进行有效的实践,是操作系统教学一直在探索的内容。本实验课程以Windows和Linux操作系统为主要平台,从基本原理出发,通过几个实验,使学生能对操作系统的基本原理有更深入的了解,为将来从事操作系统方面的研究工作打下一定的基础。

目录 实验一Windows的用户界面 (4) 实验二Windows2003的任务与进程管理器 (6) 实验三Linux使用环境 (10) 实验四Linux进程管理、内存管理、设备管理 (13) 实验五Windows2003内存管理 (16) 实验六目录和文件管理 (19) 实验七用户与组群管理 (21)

计算机操作系统习题及答案.

第5章死锁 1)选择题 (1)为多道程序提供的可共享资源不足时,可能出现死锁。但是,不适当的_C__ 也可能产生死锁。 A. 进程优先权 B. 资源的线性分配 C. 进程推进顺序 D. 分配队列优先权 (2)采用资源剥夺法可以解除死锁,还可以采用_B___ 方法解除死锁。 A. 执行并行操作 B. 撤消进程 C. 拒绝分配新资源 D. 修改信号量 (3)发生死锁的必要条件有四个,要防止死锁的发生,可以通过破坏这四个必要条件之一来实现,但破坏_A__ 条件是不太实际的。 A. 互斥 B. 不可抢占 C. 部分分配 D. 循环等待 (4)为多道程序提供的资源分配不当时,可能会出现死锁。除此之外,采用不适当的_ D _ 也可能产生死锁。 A. 进程调度算法 B. 进程优先级 C. 资源分配方法 D. 进程推进次序 (5)资源的有序分配策略可以破坏__D___ 条件。 A. 互斥使用资源 B. 占有且等待资源 C. 非抢夺资源 D. 循环等待资源 (6)在__C_ 的情况下,系统出现死锁。 A. 计算机系统发生了重大故障 B. 有多个封锁的进程同时存在 C. 若干进程因竞争资源而无休止地相互等待他方释放已占有的资源 D. 资源数大大小于进程数或进程同时申请的资源数大大超过资源总数 (7)银行家算法在解决死锁问题中是用于_B__ 的。 A. 预防死锁 B. 避免死锁 C. 检测死锁 D. 解除死锁 (8)某系统中有3个并发进程,都需要同类资源4个,试问该系统不会发生死锁的最少资源数是_C__ 。 A. 12 B. 11 C. 10 D. 9 (9)死锁与安全状态的关系是_A__ 。 A. 死锁状态一定是不安全状态 B. 安全状态有可能成为死锁状态 C. 不安全状态就是死锁状态 D. 死锁状态有可能是安全状态

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

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

————————————————————————————————作者:————————————————————————————————日期:

一、实验目的 熟悉主存的分配与回收。理解在不同的存储管理方式下,如何实现主存空间的分配与回收。掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理方式及其实现过程。 二、实验内容和要求 主存的分配和回收的实现是与主存储器的管理方式有关的。所谓分配,就是解决多道作业或多进程如何共享主存空间的问题。所谓回收,就是当作业运行完成时将作业或进程所占的主存空间归还给系统。 可变分区管理是指在处理作业过程中建立分区,使分区大小正好适合作业的需求,并且分区个数是可以调整的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入,作业等待。随着作业的装入、完成,主存空间被分成许多大大小小的分区,有的分区被作业占用,而有的分区是空闲的。 实验要求使用可变分区存储管理方式,分区分配中所用的数据结构采用空闲分区表和空闲分区链来进行,分区分配中所用的算法采用首次适应算法、最佳适应算法、最差适应算法三种算法来实现主存的分配与回收。同时,要求设计一个实用友好的用户界面,并显示分配与回收的过程。同时要求设计一个实用友好的用户界面,并显示分配与回收的过程。 三、实验主要仪器设备和材料 实验环境 硬件环境:PC或兼容机 软件环境:VC++ 6.0 四、实验原理及设计分析 某系统采用可变分区存储管理,在系统运行当然开始,假设初始状态下,可用的内存空间为640KB,存储器区被分为操作系统分区(40KB)和可给用户的空间区(600KB)。 (作业1 申请130KB、作业2 申请60KB、作业3 申请100KB 、作业2 释放 60KB 、作业4 申请 200KB、作业3释放100KB、作业1 释放130KB 、作业5申请140KB 、作业6申请60KB 、作业7申请50KB) 当作业1进入内存后,分给作业1(130KB),随着作业1、2、3的进入,分别分配60KB、100KB,经过一段时间的运行后,作业2运行完毕,释放所占内存。此时,作业4进入系统,要求分配200KB内存。作业3、1运行完毕,释放所占内存。此时又有作业5申请140KB,作业6申请60KB,作业7申请50KB。为它们进行主存分配和回收。 1、采用可变分区存储管理,使用空闲分区链实现主存分配和回收。 空闲分区链:使用链指针把所有的空闲分区链成一条链,为了实现对空闲分区的分配和链接,在每个分区的起始部分设置状态位、分区的大小和链接各个分区的前向指针,由状态位指示该分区是否分配出去了;同时,在分区尾部还设置有一后向指针,用来链接后面的分区;分区中间部分是用来存放作业的空闲内存空间,当该分区分配出去后,状态位就由“0”置为“1”。 设置一个内存空闲分区链,内存空间分区通过空闲分区链来管理,在进行内存分配时,系统优先使用空闲低端的空间。 设计一个空闲分区说明链,设计一个某时刻主存空间占用情况表,作为主存当前使用基础。初始化空间区和已分配区说明链的值,设计作业申请队列以及作业完成后释放顺序,实现主存的分配和回收。要求每次分配和回收后显示出空闲内存分区链的情况。把空闲区说明

《计算机操作系统》实验指导书

《计算机操作系统》 实验指导书 (适合于计算机科学与技术专业) 湖南工业大学计算机与通信学院 二O一四年十月

前言 计算机操作系统是计算机科学与技术专业的主要专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。计算机操作系统的实验目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握操作系统的基本原理,加深对操作系统基本方法的理解,加深对课堂知识的理解,为学生综合运用所学知识,在Linux环境下调用一些常用的函数编写功能较简单的程序来实现操作系统的基本方法、并在实践应用方面打下一定基础。要求学生在实验指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个实验解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,并且能够进行简单分析和判断;能够熟练使用Linux用户界面;掌握操作系统中进程的概念和控制方法;了解进程的并发,进程之间的通信方式,了解虚拟存储管理的基本思想。同时培养学生进行分析问题、解决问题的能力;培养学生完成实验分析、实验方法、实验操作与测试、实验过程的观察、理解和归纳能力。 为了收到良好的实验效果,编写了这本实验指导书。在指导书中,每一个实验均按照该课程实验大纲的要求编写,力求紧扣理论知识点、突出设计方法、明确设计思路,通过多种形式完成实验任务,最终引导学生有目的、有方向地完成实验任务,得出实验结果。任课教师在实验前对实验任务进行一定的分析和讲解,要求学生按照每一个实验的具体要求提前完成准备工作,如:查找资料、设计程序、完成程序、写出预习报告等,做到有准备地上机。进行实验时,指导教师应检查学生的预习情况,并对调试过程给予积极指导。实验完毕后,学生应根据实验数据及结果,完成实验报告,由学习委员统一收齐后交指导教师审阅评定。 实验成绩考核: 实验成绩占计算机操作系统课程总评成绩的20%。指导教师每次实验对学生进行出勤考核,对实验效果作记录,并及时批改实验报告,综合评定每一次的实验成绩,在学期终了以平均成绩作为该生的实验成绩。有以下情形之一者,实验成绩为不及格: 1.迟到、早退、无故缺勤总共3次及以上者; 2.未按时完成实验达3次及以上者; 3.缺交实验报告2次及以上者。

计算机操作系统综合设计实验报告实验一

计算机操作系统综合设计 实验一 实验名称:进程创建模拟实现 实验类型:验证型 实验环境: win7 vc++6.0 指导老师: 专业班级: 姓名: 学号: 联系电话: 实验地点:东六E507 实验日期:2017 年 10 月 10 日 实验报告日期:2017 年 10 月 10 日 实验成绩:

一、实验目的 1)理解进程创建相关理论; 2)掌握进程创建方法; 3)掌握进程相关数据结构。 二、实验内容 windows 7 Visual C++ 6.0 三、实验步骤 1、实验内容 1)输入给定代码; 2)进行功能测试并得出正确结果。 2、实验步骤 1)输入代码 A、打开 Visual C++ 6.0 ; B、新建 c++ 文件,创建basic.h 头文件,并且创建 main.cpp 2)进行功能测试并得出正确结果 A 、编译、运行main.cpp B、输入测试数据 创建10个进程;创建进程树中4层以上的数型结构 结构如图所示:。

createpc 创建进程命令。 参数: 1 pid(进程id)、 2 ppid(父进程id)、3 prio(优先级)。 示例:createpc(2,1,2) 。创建一个进程,其进程号为2,父进程号为1,优先级为2 3)输入创建进程代码及运行截图 4)显示创建的进程

3、画出createpc函数程序流程图 分析createpc函数的代码,画出如下流程图:

四、实验总结 1、实验思考 (1)进程创建的核心内容是什么? 答: 1)申请空白PCB 2)为新进程分配资源 3)初始化进程控制块 4)将新进程插入到就绪队列 (2)该设计和实际的操作系统进程创建相比,缺少了哪些步骤? 答:只是模拟的创建,并没有分配资源 2、个人总结 通过这次课程设计,加深了对操作系统的认识,了解了操作系统中进程创建的过程,对进程创建有了深入的了解,并能够用高 级语言进行模拟演示。一分耕耘,一分收获,这次的课程设计让 我受益匪浅。虽然自己所做的很少也不够完善,但毕竟也是努 力的结果。另外,使我体会最深的是:任何一门知识的掌握, 仅靠学习理论知识是远远不够的,要与实际动手操作相结合才能 达到功效。

计算机操作系统实验四

实验三进程与线程 问题: 进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位,具有动态性、并发性、独立性、异步性和交互性。然而程序是静态的,并且进程与程序的组成不同,进程=程序+数据+PCB,进程的存在是暂时的,程序的存在是永久的;一个程序可以对应多个进程,一个进程可以包含多个程序。当操作系统引入线程的概念后,进程是操作系统独立分配资源的单位,线程成为系统调度的单位,与同一个进程中的其他线程共享程序空间。 本次实验主要的目的是: (1)理解进程的独立空间; (2)加深对进程概念的理解,明确进程和程序的区别; (3)进一步认识并发执行的实质; (4)了解红帽子(Linux)系统中进程通信的基本原理。 (5)理解线程的相关概念。 要求: 1、请查阅资料,掌握进程的概念,同时掌握进程创建和构造的相关知识和线程创建和 构造的相关知识,了解C语言程序编写的相关知识; (1)进程: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内

存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。 (2)进程的创建和构造: 进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一个动态的实体,它是程序的一次执行过程。进程和程序的区别在于:进程是动态的,程序是静态的,进程是运行中的程序,而程序是一些保存在硬盘上的可执行代码。新的进程通过克隆旧的程序(当前进程)而建立。fork() 和clone()(对于线程)系统调用可用来建立新的进程。 (3)线程的创建和构造: 线程也称做轻量级进程。就像进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与独立的进程相比,进程中的线程之间的独立程度要小。它们共享内存、文件句柄和其他每个进程应有的状态。 线程的出现也并不是为了取代进程,而是对进程的功能作了扩展。进程可以支持多个线程,它们看似同时执行,但相互之间并不同步。一个进程中的多个线程共享相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。尽管这让线程之间共享信息变得更容易,但你必须小心,确保它们不会妨碍同一进程里的其他线程。 线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序的流控制,但与进程不同的是,同类的多个线程是共享同一块内存空间和一组系统资源的,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之间切换时,负担要比进程小得多,正因如此,线程也被称为轻型进程(light-weight process)。一个进程中可以包含多个线程。 2、理解进程的独立空间的实验内容及步骤

计算机操作系统答案

习题一 1.什么是操作系统?它的主要功能是什么? 答:操作系统是用来管理计算机系统的软、硬件资源,合理地组织计算机的工作流程,以方便用户使用的程序集合; 其主要功能有进程管理、存储器管理、设备管理和文件管理功能。 2.什么是多道程序设计技术?多道程序设计技术的主要特点是什么? 答:多道程序设计技术是把多个程序同时放入内存,使它们共享系统中的资源; 特点:(1)多道,即计算机内存中同时存放多道相互独立的程序; (2)宏观上并行,是指同时进入系统的多道程序都处于运行过程中; (3)微观上串行,是指在单处理机环境下,内存中的多道程序轮流占有CPU,交替执行。 3.批处理系统是怎样的一种操作系统?它的特点是什么? 答:批处理操作系统是一种基本的操作系统类型。在该系统中,用户的作业(包括程序、数据及程序的处理步骤)被成批的输入到计算机中,然后在操作系统的控制下,用户的作业自动地执行; 特点是:资源利用率高、系统吞吐量大、平均周转时间长、无交互能力。4.什么是分时系统?什么是实时系统?试从交互性、及时性、独立性、多路性 和可靠性几个方面比较分时系统和实时系统。 答:分时系统:一个计算机和许多终端设备连接,每个用户可以通过终端向计算机发出指令,请求完成某项工作,在这样的系统中,用户感觉不到其他用户的存在,好像独占计算机一样。 实时系统:对外部输入的信息,实时系统能够在规定的时间内处理完毕并作出反应。 比较:(1)交互性:实时系统具有交互性,但人与系统的交互,仅限于访问系统中某些特定的专用服务程序。它不像分时系统那样向终端用户提供数据处理、资源共享等服务。实时系统的交互性要求系统具有连续人机对话的能力,也就是说,在交互的过程中要对用户得输入有一定的记忆和进一步的推断的能力。 (2)及时性:实时系统对及时性没的要求与分时系统类似,都以人们能够接受的等待时间来确定。而及时系统则对及时性要求更高。 (3)独立性:实时系统与分时系统一样具有独立性。每个终端用户提出请求时,是彼此独立的工作、互不干扰。 (4)多路性:实时系统与分时一样具有多路性。操作系统按分时原则为多个终端用户提供服务,而对于实时系统,其多路性主要表现在经常对多路的现场信息进行采集以及对多个对象或多个执行机构进行控制。 (5)可靠性:分时系统虽然也要求可靠性,但相比之下,实时系统则要求系统高度可靠。 5.实时系统分为哪两种类型? 答:实时控制系统、实时信息处理系统。 6.操作系统的主要特征是什么? 答:并发性、共享性、虚拟性、不确定性。 7.操作系统与用户的接口有几种?他们各自用在什么场合? 答:有两种:命令接口、程序接口;

计算机操作系统 实验报告

操作系统实验报告 学院:计算机与通信工程学院 专业:计算机科学与技术 班级: 学号: 姓名: 指导教师: 成绩: 2014年 1 月 1 日

实验一线程的状态和转换(5分) 1 实验目的和要求 目的:熟悉线程的状态及其转换,理解线程状态转换与线程调度的关系。 要求: (1)跟踪调试EOS线程在各种状态间的转换过程,分析EOS中线程状态及其转换的相关源代码; (2)修改EOS的源代码,为线程增加挂起状态。 2 完成的实验内容 2.1 EOS线程状态转换过程的跟踪与源代码分析 (分析EOS中线程状态及其转换的核心源代码,说明EOS定义的线程状态以及状态转换的实现方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等) 1.EOS 准备了一个控制台命令“loop ”,这个命令的命令函数是 ke/sysproc.c 文件中的ConsoleCmdLoop 函数(第797行,在此函数中使用 LoopThreadFunction 函数(第755 行)创建了一个优先级为 8 的线程(后面简称为“loop 线程”),该线程会在控制台中不停的(死循环)输出该线程的ID和执行计数,执行计数会不停的增长以表示该线程在不停的运行。loop命令执行的效果可以参见下图: 2. 线程由阻塞状态进入就绪状态 (1)在虚拟机窗口中按下一次空格键。 (2)此时EOS会在PspUnwaitThread函数中的断点处中断。在“调试”菜单中选择“快速监视”,在快速监视对话框的表达式编辑框中输入表达式“*Thread”,然后点击“重新计算”按钮,即可查看线程控制块(TCB)中的信息。其中State域的值为3(Waiting),双向链表项StateListEntry的Next和Prev指针的值都不为0,说明这个线程还处于阻塞状态,并在某个同步对象的等待队列中;StartAddr域的值为IopConsoleDispatchThread,说明这个线程就是控制台派遣线程。 (3)关闭快速监视对话框,激活“调用堆栈”窗口。根据当前的调用堆栈,可以看到是由键盘中断服务程序(KdbIsr)进入的。当按下空格键后,就会发生键盘中断,从而触发键盘中断服务程序。在该服务程序的最后中会唤醒控制台派遣线程,将键盘事件派遣到活动的控制台。 (4)在“调用堆栈”窗口中双击PspWakeThread函数对应的堆栈项。可以看到在此函数中连续调用了PspUnwaitThread函数和PspReadyThread函数,从而使处于阻塞状态的控制台派遣线程进入就绪状态。 (5)在“调用堆栈”窗口中双击PspUnwaitThread函数对应的堆栈项,先来看看此函数是如何改变线程状态的。按F10单步调试直到此函数的最后,然后再从快速监视对

实验报告计算机操作系统-Windows.pdf

班级 178 学号姓名 【实验目的】 1. 掌握Windows 7的基本操作; 2. 熟练掌握资源管理器、文件与文件夹的管理方法 3. Windows 7控制面板的使用 【实验内容和步骤】 一.Windows7基本操作和文件管理 完成实践教程第18页中的实验并回答下列问题。 1.如何新建文件或文件夹? 在桌面空白处单击鼠标右键,选择“新建”--“文件夹”,键入新文件夹的名称,然后按 ENTER 键。 2.如何选定多个相邻文件或文件夹?如何选定多个不相邻文件和文件夹?如何选中全部文件和文件夹? 选定多个相邻文件的操作是:单击第一个文件,然后按住Shift 键,再单击最后一个文件 Shift 键,就是Ctrl 键上面那个。 选定多个不相邻文件操作是:单击第一个文件,然后按住Ctrl 键的同时,单击其他待选定的文件 Ctrl 键,就是键盘最左下角那个。 如何选中全部文件和文件夹:ctrl+A 3.试列举对文件/文件夹进行复制和移动的方法? 第一种方法:可以用鼠标右键进行操作。 第二种:可用ctrl+c 进行复制;ctrl+x 进行移动(也就是剪切)ctrl+v进行粘贴 4.如何对已删除的文件进行“还原”?

如果没清空回收站,在回收站里还原就行。 5.如何对按照修改日期搜索文件或文件夹? 我的电脑右键选搜索,打开搜索界面,在搜索选项里按日期,选中并输入日期 6.如何“隐藏”文件/文件夹?如何显示被“隐藏”起来的文件/文件夹图标? 把想隐藏文件的文件夹或文件,打开文件夹属性,隐藏打钩或去掉即可以选择这个文件是否隐藏或显示 打开任意的文件夹的工具选项卡的文件夹选项——查看选项卡——隐藏文件和文件夹上面有2个选择,选择显示隐藏文件夹即可看到隐藏文件 二.Windows7系统设置 完成实践教程第23页中的实验并回答下列问题。 1.如何改变桌面的背景、屏幕的分辨率并设置屏幕保护程序。 开始—控制面板—外观和个性化—个性化,然后进行桌面背景、窗口颜色、屏幕保护调整。 2.如何修改计算机的系统日期和时间。 (1)点开始--运行回车--打开组策略。 (2)在组策略管理器中选择“计算机配置”--windows设置--安全设置--本地策略--用户权利指派--更改系统时间。 (3)双击打开“更新系统时间配置”属性对话框,把里 面用户名全删除,点确定。 (4)重启计算机 3.如何为计算机添加“简体中文双拼”输入法。 可以右击输入法图标,选“设置”,“添加”,找到双拼输入法后单击“确定”就可以使用了。

操作系统原理实验四

实验4 进程控制 1、实验目的 (1)通过对WindowsXP进行编程,来熟悉和了解系统。 (2)通过分析程序,来了解进程的创建、终止。 2、实验工具 (1)一台WindowsXP操作系统的计算机。 (2)计算机装有Microsoft Visual Studio C++6.0专业版或企业版。 3、预备知识 (3)·CreateProcess()调用:创建一个进程。 (4)·ExitProcess()调用:终止一个进程。 4、实验编程 (1)编程一利用CreateProcess()函数创建一个子进程并且装入画图程序(mspaint.exe)。阅读该程序,完成实验任务。源程序如下: # include < stdio.h > # include < windows.h > int main(VOID) ﹛STARTUPINFO si; PROCESS INFORMA TION pi; ZeroMemory(&si,sizeof(si)); Si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(!CreateProcess(NULL, “c: \ WINDOWS\system32\ mspaint.exe”, NULL, NULL, FALSE, 0, NULL, NULL, &si,&pi)) ﹛fprintf(stderr,”Creat Process Failed”); return—1; ﹜ WaitForSingleObject(pi.hProcess,INFINITE); Printf(“child Complete”); CloseHandle(pi.hProcess); CloseHandle(pi hThread); ﹜

计算机操作系统第二章课后答案(完整版)

第二章 1. 什么是前趋图?为什么要引入前趋图? 答:前趋图(Precedence Graph)是一个有向无循环图,记为DAG(Directed Acyclic Graph),用于描述进程之间执行的前后关系。 2. 画出下面四条语句的前趋图: S1=a:=x+y; S2=b:=z+1; S3=c:=a – b; S4=w:=c+1; 答:其前趋图为: 3. 什么程序并发执行会产生间断性特征? 答:程序在并发执行时,由于它们共享系统资源,为完成同一项任务需要相互合作,致使这些并发执行的进程之间,形成了相互制约关系,从而使得进程在执行期间出现间断性。4.程序并发执行时为什么会失去封闭性和可再现性? 答:程序并发执行时,多个程序共享系统中的各种资源,因而这些资源的状态由多个程序改变,致使程序运行失去了封闭性,也会导致其失去可再现性。 5.在操作系统中为什么要引入进程概念?它会产生什么样的影响? 答:为了使程序在多道程序环境下能并发执行,并对并发执行的程序加以控制和描述,在操作系统中引入了进程概念。 影响: 使程序的并发执行得以实行。 6.试从动态性,并发性和独立性上比较进程和程序? 答:(1)动态性是进程最基本的特性,表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,由撤销而消亡。进程有一定的生命期,而程序只是一组有序的指令集合,是静态实体。 (2)并发性是进程的重要特征,同时也是OS 的重要特征。引入进程的目的正是为了使 其程序能和其它进程的程序并发执行,而程序是不能并发执行的。 (3)独立性是指进程实体是一个能独立运行的基本单位,也是系统中独立获得资源和独 立调度的基本单位。对于未建立任何进程的程序,不能作为独立单位参加运行。 7.试说明PCB 的作用,为什么说PCB 是进程存在的惟一标志? 答:PCB 是进程实体的一部分,是操作系统中最重要的记录型数据结构。作用是使一个在多道程序环境下不能独立运行的程序,成为一个能独立运行的基本单位,成为能与其它进程并发执行的进程。OS是根据PCB对并发执行的进程进行控制和管理的。 8.试说明进程在三个基本状态之间转换的典型原因。 答:(1)就绪状态→执行状态:进程分配到CPU资源 (2)执行状态→就绪状态:时间片用完 (3)执行状态→阻塞状态:I/O请求 (4)阻塞状态→就绪状态:I/O完成 9.为什么要引入挂起状态?该状态有哪些性质? 答:引入挂起状态处于五种不同的需要: 终端用户需要,父进程需要,操作系统需要,对换北京石油化工学院信息工程学院计算机系5/48 《计算机操作系统》习题参考答案余有明与计07和计G09的同学们编著 5/48 需要和负荷调节需要。处于挂起状态的进程不能接收处理机调度。

四川大学计算机操作系统第四实验报告

实验报告 (学生打印后提交) 实验名称:作业调度系统 实验时间: 2015 年 6 月 4 日 实验人员:________(姓名)_____(学号)______(年级) 实验目的: ?理解操作系统中调度的概念和调度算法。 ?学习Linux下进程控制以及进程之间通信的知识。 ?理解在操作系统中作业是如何被调度的,如何协调和控制各个作业对CPU的使用 实验环境: linux 实验步骤: 1. 1、调用vi编辑器修改job.h文件,为命名管道FIFO设置正确的路径,修改语句:#define FIFO "/home/student/SVRFIFO" 2. 修改scheduler.c文件,添加作业的打印信息,即修改函数do_stat,要求再输出作业名称、当 前优先级、默认优先级。 3. 在printf( “JID\tPID\tOWNER\tRUNTIME\tWAITTIME\tCREATTIME\t\tSTATE\n”);语句 中添加JOBNAME、CURPRI、DEFPRI。 4. 接下来的两个输出语句根据表头修改,注意printf语句的输出格式,输出的信息内容参照 jobinfo结构体。 5、用gcc分别编译连接作业调度程序、三个命令程序。 6、在一个控制台窗口中运行作业调度程序作为服务端。 7、提交一个运行时间超过100毫秒的作业(要求提供源程序),并编译连接。 8.再打开一个窗口登录服务器作为客户端,在其中运行作业控制命令(提交作业、删除作业、查看信息), 在服务端观察调度情况,分析所提交作业的执行情况。 实验陈述: 1、基础知识: ?说明进程与程序的区别:程序是静态的指令集合,不占用系统的运行资源,可以长久保存在 磁盘。进程是进程实体(程序、数据和进程控制块构成)的运行过程,是系统进行资源分配和 调度的一个独立单位。进程执行程序,但进程与程序之间不是一一对应的。通过多次运行,同一 程序可以对应多个进程;通过调用关系,一个进程可以包含多个程序。 ?说明进程与作业的区别:作业是用户一个事务处理过程中要求计算机系统所做工作 的集合,作业可以包含几个进程。 ?说明作业调度与进程调度的区别:作业调度是按照一定的原则从外存的作业后备队 列中选择作业调入内存,并为其分配资源,创建相应的进程,然后进入就绪队列。进 程调度是按照某种策略或方法从就绪队列中选择进程,将处理机分配给它。 2、实验知识 ?本实验作业有几种状态READY:作业准备就绪可以运行。RUNNING:作业正在运行DONE: 作业已经运行结束,可以退出。有这三种状态,但只用到前两种。 ?

计算机操作系统实验资料

操作系统实验报告 1.实验目的及要求 ①了解什么是信号。 ②熟悉LINUX系统中进程之间软中断通信的基本原理。 2.实验环境 VMware Workstation 12 Player 3.实验内容 ①编写一段程序,使用系统调用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按ctrl+c 键),当捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:Child process 1 is killed by parent! Child process 2 is killed by parent! 父进程等待两个子进程终止后,输出以下信息后终止: Parent process is killed! ②程序实例 #include #include #include

int wait_mark; void waiting(); void stop(); void main() { int p1,p2; signal(SIGINT,stop); //signal()初始位置while((p1=fork())==-1); if(p1>0) { signal(SIGINT,stop); while((p2=fork())==-1); if(p2>0) { signal(SIGINT,stop); wait_mark=1; waiting(); kill(p1,10); kill(p2,12); wait(); wait(); printf("parent process is killed!\n"); exit(0);

计算机操作系统实验-文件管理

哈尔滨工业大学计算机科学与技术学院 实验报告 课程名称:操作系统 课程类型:必修 实验项目名称:文件管理 实验题目:设计一个多用户的文件系统 班级:实验学院一班 学号:6040310110 姓名:张元竞 设计成绩报告成绩指导老师

一、实验目的 随着社会信息量的极大增长,要求计算机处理的信息与日俱增,涉及到社会生活的各个方面。因此,文件管理是操作系统的一个非常重要的组成部分。学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。 二、实验要求及实验环境 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。要求设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。系统能够检查打入命令的正确性,出错时能显示出错原因。对文件必须设置保护措施,例如只能执行,允许读等。在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。文件的操作至少有Create、delete、open、close、read、write等命令。 所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。前者应包含文件主及它们的目录区指针;后者应给出每个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。 三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)

计算机操作系统第四版课后习题答案

《计算机操作系统》课后习题答案 注:课本为《计算机操作系统(第四版)》,汤小丹梁红兵哲凤屏汤子瀛编著,西安电子科技大学出版社出版 第一章 1.设计现代OS的主要目标是什么? 答:(1)有效性(2)方便性(3)可扩充性(4)开放性 2.OS的作用可表现在哪几个方面? 答:(1)OS作为用户与计算机硬件系统之间的接口 (2)OS作为计算机系统资源的管理者 (3)OS实现了对计算机资源的抽象 3.为什么说OS实现了对计算机资源的抽象? 答:OS首先在裸机上覆盖一层I/O设备管理软件,实现了对计算机硬件操作的第一层次抽象;在第一层软件上再覆盖文件管理软件,实现了对硬件资源操作的第二层次抽象。OS 通过在计算机硬件上安装多层系统软件,增强了系统功能,隐藏了对硬件操作的细节,由它们共同实现了对计算机资源的抽象。 4.试说明推动多道批处理系统形成和发展的主要动力是什么? 答:主要动力来源于四个方面的社会需求与技术发展: (1)不断提高计算机资源的利用率; (2)方便用户; (3)器件的不断更新换代; (4)计算机体系结构的不断发展。 5.何谓脱机I/O和联机I/O? 答:脱机I/O 是指事先将装有用户程序和数据的纸带或卡片装入纸带输入机或卡片机,在外围机的控制下,把纸带或卡片上的数据或程序输入到磁带上。该方式下的输入输出由外围机控制完成,是在脱离主机的情况下进行的。 而联机I/O方式是指程序和数据的输入输出都是在主机的直接控制下进行的。 6.试说明推动分时系统形成和发展的主要动力是什么? 答:推动分时系统形成和发展的主要动力是更好地满足用户的需要。主要表现在:CPU 的分时使用缩短了作业的平均周转时间;人机交互能力使用户能直接控制自己的作业;主机的共享使多用户能同时使用同一台计算机,独立地处理自己的作业。 7.实现分时系统的关键问题是什么?应如何解决?

计算机操作系统实验四

实验四:文件系统<一> [背景知识] 1. 选择文件系统 文件系统决定了操作系统能够对磁盘进行的处理。Windows xp 支持的文件系统主要有: 1) 文件分配表 (File Allocation Table ,FAT) 文件系统 (FAT16) 2) 保护模式FAT 文件系统 (FAT32) 3) Windows NT 文件系统 (NTFS) FAT 文件系统是早期文件系统之一,也是MS-DOS 使用的原始文件系统。它将文件信息储存在位于卷标开头处的文件分配表中,并保存两份文件分配表,以防其中的一个遭到破坏,见图7-1所示。 FAT 文件系统最大的优点是MS-DOS 、Windows 9x 甚至OS/2都能访问FAT 卷标;而其最大的弱点是随着FAT 卷标尺寸的增长,最小的簇尺寸也随之增长。对于大于512MB 的硬盘而言,最小的簇尺寸为16KB ;对于大于2GB 的硬盘,最小的簇尺寸为64KB 。这就导致磁盘空间的极大浪费,因为一个文件必须占用整数个簇。因此,1KB 的文件在2GB 的硬盘上将占用64KB 的磁盘空间。FAT 文件系统不支持尺寸大于4GB 的卷标。 图7-1 FAT 文件系统的结构 FAT32文件系统通过提供长文件名的支持来扩展FAT 文件系统,并与FAT16兼容。FA T (16和32) 文件系统是支持可移动媒体 (例如软盘) 上的惟一的文件系统。 Windows NT 文件系统 (NTFS) 包括了FAT 文件系统的所有功能,同时又提供了对高级文件系统特征 (例如安全模式、压缩和加密) 的支持。它是为在大磁盘上有效地完成文件操作而设计的。与FAT 和保护模式FAT 文件系统不同,它的最小簇尺寸不超过4KB 。但是,NTFS 卷标只能为Windows NT 、2000和XP 操作系统所访问。 Windows xp 提供的新特征 (NTFS 5.0) 使文件系统更安全、更可靠,比以往的Windows 版本更好地支持分布式计算。 此外,Windows xp 支持的文件系统还有: CDFS :光盘文件系统 (Compact Disc File System) 用于光盘的文件存储。 UDF :通用磁盘格式 (Universal Disk Format) 用于DVD 的文件存储。 在文件系统中,FAT16、FAT32和NTFS 这三个文件系统对磁盘子系统的性能影响最大。而事实上,选择NTFS 之外的任何文件系统都只有两个理由,即: 1) 可双引导系统 2) 小于400MB 的卷 如果系统不是这两种情况,那么NTFS 就应该是所选择的文件系统,NTFS 将提供更好的性能、可靠性和安全性。 2. EFS 加密文件系统 EFS (Encrypting File System) 实际上是NTFS 的一个特性, 它提供了核心文件加密技术,

相关文档
最新文档