Ⅰ 怎么学好linux的内核应该从什么地方入手
C c++ 数据结构,算法。
Ⅱ 操作系统判断题!求大神!
虽然曾经学过计算机操作系统,但是毕竟好多年没有摸过了。这里根据自己的一点儿理解写一下判断题的答案,仅供你个人参考。
1、对;2、错;3、错;4、对;5、对;6、对;7、错;8、对;9、对;10、错。
Ⅲ 进程同步及银行家算法的模拟实现 有会的大侠们帮帮忙吧 这个要求实在是太多 不太懂 答的好的追100
银行家算法=-- -
1. 安全状态: 在某时刻系统中所有进程可以排列一个安全序列:,刚称此时,系统是安全的.
所谓安全序列是指对于P2,都有它所需要剩余资源数量不大于系统掌握的剩余的空间资源与所有Pi(j<i)所占的资源之和.
2.不安全状态可能产生死锁.
目前状态 最大需求 尚需
P1 3 9 6
P2 5 10 5
P3 2 4 2
在每一次进程中申请的资源,判定一下,若实际分配的话,之后系统是否安全.
3.银行家算法的思路:
1),进程一开始向系统提出最大需求量.
2),进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量.
3),若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的
剩余资源量,若不超出,则分配,否则等待.
4.银行家算法的数据结构.
1),系统剩余资源量A[n],其中A[n]表示第I类资源剩余量.
2),各进程最大需求量,B[m][n],其中B[j][i]表示进程j对i
类资源最大需求.
3),已分配资源量C[m][n],其中C[j][i]表示系统j程已得到的第i资源的数量.
4),剩余需求量.D[m][n],其中D[j][i]对第i资源尚需的数目.
5.银行家算法流程:当某时刻,某进程时,提出新的资源申请,系统作以下操作:
1),判定E[n]是否大于D[j][n],若大于,表示出错.
2),判定E[n]是否大于系统剩余量A[n],若大于,则该进程等待.
3),若以上两步没有问题,尝试分配,即各变量作调整.
4),按照安全性推测算法,判断,分配过后,系统是否安全,若安全,则实际分配,否则,撤消分配,让进程等待.
6."安全性检测"算法
1),先定义两个变量,用来表示推算过程的数据.
F[n]=A[n],表示推算过程中,系统中剩余资源量的变化.
J[n]=False表示推算过程中各进程是否假设"已完成"
2),流程:
在"剩余"的进程中(在推算)过程中,一些进程假设已完成,查找D[j][n]<=F[n]的进程,找到后令J[j]=True
(假设该进程完成),F[n]+D[j][n](该进程所占资源释放),如此循环执行.
若最后,所有的F[n]=True(在推算过程中,所有进程均可以完成),则表示(分配过后)系统是安全的,否则系统是不安全的.
#include "malloc.h"
#include "stdio.h"
#define alloclen sizeof(struct allocation)
#define maxlen sizeof(struct max)
#define avalen sizeof(struct available)
#define needlen sizeof(struct need)
#define finilen sizeof(struct finish)
#define pathlen sizeof(struct path)
struct allocation
{
int value;
struct allocation *next;
};
struct max
{
int value;
struct max *next;
};
struct available
{
int value;
struct available *next;
};
struct need
{
int value;
struct need *next;
};
struct path
{
int value;
struct path *next;
};
struct finish
{
int stat;
struct finish *next;
};
int main()
{
int row,colum,status=0,i,j,t,temp,processtest;
struct allocation *allochead,*alloc1,*alloc2,*alloctemp;
struct max *maxhead,*maxium1,*maxium2,*maxtemp;
struct available *avahead,*available1,*available2,*availabletemp,*workhead,*work1,*work2,*worktemp,*worktemp1;
struct need *needhead,*need1,*need2,*needtemp;
struct finish *finihead,*finish1,*finish2,*finishtemp;
struct path *pathhead,*path1,*path2,*pathtemp;
char c;
printf("\nPlease enter the type of sources the system has:\n");
scanf("%d",&colum);
printf("Please enter the number of processes now in the memory:\n");
scanf("%d",&row);
printf("Please enter the allocation array:\n");
for(i=0;i<row;i++)
{
printf("The allocation for process p%d:\n",i);
for (j=0;j<colum;j++)
{
printf("The type %c system resource allocated:\n",'A'+j);
if(status==0)
{
allochead=alloc1=alloc2=(struct allocation*)malloc(alloclen);
alloc1->next=alloc2->next=NULL;
scanf("%d",&allochead->value);
status++;
}
else
{
alloc2=(struct allocation *)malloc(alloclen);
scanf("%d,%d",&alloc2->value);
if(status==1)
{
allochead->next=alloc2;
status++;
}
alloc1->next=alloc2;
alloc1=alloc2;
}
}
}
alloc2->next=NULL;
status=0;
printf("Please enter the max array:\n");
for(i=0;i<row;i++)
{
printf("The max needed from process p%d:\n",i);
for (j=0;j<colum;j++)
{
printf("The type %c maxium system resource may needed:\n",'A'+j);
if(status==0)
{
maxhead=maxium1=maxium2=(struct max*)malloc(maxlen);
maxium1->next=maxium2->next=NULL;
scanf("%d",&maxium1->value);
status++;
}
else
{
maxium2=(struct max *)malloc(maxlen);
scanf("%d,%d",&maxium2->value);
if(status==1)
{
maxhead->next=maxium2;
status++;
}
maxium1->next=maxium2;
maxium1=maxium2;
}
}
}
maxium2->next=NULL;
status=0;
printf("Please enter the available array now exists in the system:\n");
for (j=0;j<colum;j++)
{
printf("The type %c available system resource number:\n",'A'+j);
if(status==0)
{
avahead=available1=available2=(struct available*)malloc(avalen);
workhead=work1=work2=(struct available*)malloc(avalen);
available1->next=available2->next=NULL;
work1->next=work2->next=NULL;
scanf("%d",&available1->value);
work1->value=available1->value;
status++;
}
else
{
available2=(struct available*)malloc(avalen);
work2=(struct available*)malloc(avalen);
scanf("%d,%d",&available2->value);
work2->value=available2->value;
if(status==1)
{
avahead->next=available2;
workhead->next=work2;
status++;
}
available1->next=available2;
available1=available2;
work1->next=work2;
work1=work2;
}
}
available2->next=NULL;
work2->next=NULL;
status=0;
alloctemp=allochead;
maxtemp=maxhead;
for(i=0;i<row;i++)
for (j=0;j<colum;j++)
{
if(status==0)
{
needhead=need1=need2=(struct need*)malloc(needlen);
need1->next=need2->next=NULL;
need1->value=maxtemp->value-alloctemp->value;
status++;
}
else
{
need2=(struct need *)malloc(needlen);
need2->value=(maxtemp->value)-(alloctemp->value);
if(status==1)
{
needhead->next=need2;
status++;
}
need1->next=need2;
need1=need2;
}
maxtemp=maxtemp->next;
alloctemp=alloctemp->next;
}
need2->next=NULL;
status=0;
for(i=0;i<row;i++)
{
if(status==0)
{
finihead=finish1=finish2=(struct finish*)malloc(finilen);
finish1->next=finish2->next=NULL;
finish1->stat=0;
status++;
}
else
{
finish2=(struct finish*)malloc(finilen);
finish2->stat=0;
if(status==1)
{
finihead->next=finish2;
status++;
}
finish1->next=finish2;
finish1=finish2;
}
}
finish2->next=NULL; /*Initialization compleated*/
status=0;
processtest=0;
for(temp=0;temp<row;temp++)
{
alloctemp=allochead;
needtemp=needhead;
finishtemp=finihead;
worktemp=workhead;
for(i=0;i<row;i++)
{
worktemp1=worktemp;
if(finishtemp->stat==0)
{
for(j=0;j<colum;j++,needtemp=needtemp->next,worktemp=worktemp->next)
if(needtemp->value<=worktemp->value)
processtest++;
if(processtest==colum)
{
for(j=0;j<colum;j++)
{
worktemp1->value+=alloctemp->value;
worktemp1=worktemp1->next;
alloctemp=alloctemp->next;
}
if(status==0)
{
pathhead=path1=path2=(struct path*)malloc(pathlen);
path1->next=path2->next=NULL;
path1->value=i;
status++;
}
else
{
path2=(struct path*)malloc(pathlen);
path2->value=i;
if(status==1)
{
pathhead->next=path2;
status++;
}
path1->next=path2;
path1=path2;
}
finishtemp->stat=1;
}
else
{
for(t=0;t<colum;t++)
alloctemp=alloctemp->next;
finishtemp->stat=0;
}
}
else
for(t=0;t<colum;t++)
{
needtemp=needtemp->next;
alloctemp=alloctemp->next;
}
processtest=0;
worktemp=workhead;
finishtemp=finishtemp->next;
}
}
path2->next=NULL;
finishtemp=finihead;
for(temp=0;temp<row;temp++)
{
if(finishtemp->value==0)
{
printf("\nWARNING,the system is in nonsafe status!\n");
exit(0);
}
finishtemp=finishtemp->next;
}
printf("\nThe system is in safe status!\n");
printf("\nThe safe sequence is: \n");
do
{
printf("p%d ",pathhead->value);
}
while(pathhead=pathhead->next);
}
Ⅳ 操作系统计算题该怎么学
我是计科专业的 学过操作系统 感觉貌似没有啥计算题 操作系统中pv操作挺重要的
还有就是死锁那部分的题 说到计算磁盘存储忘记是不是操作系统学的了 还有 文件存储 可能会涉及计算吧 希望对你有帮助
Ⅳ 考计算机专业的研究生时考的操作系统是什么系统,是windows、linux、还是unix啊
操作系统考研不针对具体系统,而是针对于操作系统理论知识,当然,可能会涉及到诸如linux和windows中的某些细微的机制。
例如2010年的考纲是这样的:
【考查目标】
1、了解操作系统在计算机系统中的作用、地位、发展和特点。
2、理解操作系统的基本概念、原理,掌握操作系统设计方法与实现技术。
3、能够运用所学的操作系统原理、方法与技术分析问题和解决问题。
一)操作系统概述
(一)操作系统的概念、特征、功能和提供的服务
(二)操作系统的发展与分类
(三)操作系统的运行环境
二)进程管理
(一) 进程与线程
1、进程概念
2、进程的状态与转换
3、进程控制
4、进程组织
5、进程通信:共享存储系统、消息传递系统和管道通信。
6、线程概念与多线程模型
(二)处理机调度
1、调度的基本概念
2、调度时机、切换与过程
3、调度的基本准则
4、调度方式
5、典型调度算法:先来先服务调度算法、短作业(短进程、短线程)优先调度算法优先调度算法、时间片轮转调度算法、优先级调度算法、高响应比优先调度算法和多级反馈队列调度算法。
(三)进程同步
1、进程同步的基本概念
2、实现临界区互斥的基本方法:软件实现方法和硬件实现方法。
3、信号量
4、管程
5、经典同步问题:生产者-消费者问题、读者-写者问题、哲学家进餐问题。
(四)死锁
1、死锁的概念
2、死锁处理策略
3、死锁预防
4、死锁避免:系统安全状态(银行家算法)
5、死锁检测和解除
三)内存管理
(一)内存管理基础
1、内存管理概念
程序装入与链接;逻辑地址与物理地址空间;内存保护。
2、交换与覆盖
3、连续分配管理方式
4、非连续分配管理方式
分页管理方式;分段管理方式;段页式管理方式。
(二)虚拟内存管理
1、虚拟内存基本概念
2、请求分页管理方式
3、页面置换算法:最佳置换算法(OPT)、先进先出置换算法(FIFO)、最近最少使用置换算法(LRU)、时钟置换算法(CLOCK)。
4、页面分配策略
5、抖动:抖动现象、工作集。
6、请求分段管理方式
7、请求段页式管理方式
四)文件管理
(一)文件系统基础
1、文件概念
2、文件结构:顺序文件、索引文件、索引顺序文件。
3、目录结构:文件控制块和索引节点、单级目录结构和两级目录结构、树形目录结构、图形目录结构。
4、文件共享
5、文件保护
(二)文件系统实现
1、文件系统层次结构
2、目录实现
3、文件实现
(三)磁盘组织与管理
1、磁盘的结构
2、磁盘调度算法
3、磁盘的管理
五)输入输出(I/O)管理
(一)I/O管理概述
1、I/O设备
2、I/O管理目标
3、I/O管理功能
4、I/O应用接口
5、I/O控制方式
(二)I/O核心子系统
1、I/O调度概念
2、高速缓存与缓冲区
3、设备分配与回收
4、假脱机技术(SPOOLing)
5、出错处理
Ⅵ 哪个操作系统采用银行家算法windows xp linux freebsd unix none of the above
在主窗体mainwindow.cpp文件中添加槽函数on_btn_RadioButton_clicked():
/****槽函数:设置RadioButton1为选中状态****/
void MainWindow::on_btn_RadioButton_clicked()
{
ui->radioButton->setChecked(true);//设置radioButton为选中状态
/****设置label显示“RadioButton1 is Checked!”****/
ui->label->setText("RadioButton1 is Checked!");
}
在主窗体mainwindow.cpp文件中添加槽函数on_btn_CheckBox_clicked():
/****槽函数:显示被选中的CheckBox****/
void MainWindow::on_btn_CheckBox_clicked()