① 计算机操作系统安全序列
序列号共有5组,每组5个字符,总共有25个字符。这些字符包括字母和数字,一个正确的序列号会选用以下24个基本字符:B、C、D、F、G、H、J、K、M、P、Q、R、T、V、W、X、Y、2、3、4、6、7、8、9。如果你的序列号含有这24个字符之外的其他字符,那不用说一定是错误的。
下面言归正传,为大家介绍一下不同版本Windows序列号的查找方法。让Windows序列号原形毕露1.Windows98Windows98的安装序列号最容易找,因为它就藏在注册表里,我们一起把它给揪出来吧!首先打开注册表编辑器,依次展开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion分支,在右侧窗口中找到“ProctKey”字符串值,对,它的键值就是序列号!晨风提示(1)WindowsMe基于Windows98内核,所以其序列号的查找方法与Windows98一样,就连在注册表中的藏身之处也丝毫不差。
(2)上面介绍的方法有个前提条件,就是必须能进入Windows图形界面,如果连Windows也进不了,我们还可以在DOS下查看Windows98的序列号:用启动盘启动电脑,然后输入C?\Windows\Command\Find/l“ProctKey”C?\Windows\System.dat(假设C盘为系统盘),回车后就会显示出Windows98的序列号了。
2.Windows2000既然Windows98的安装序列号藏身在注册表里,那么Windows2000呢?你可不要指望能在注册表里找到它,因为出于安全考虑,微软根本就没有将Windows2000的序列号放到注册表里。别着急,我们不妨在Windows2000的系统文件夹里搜寻一番,说不定“踏破铁鞋无觅处,得来全不费工夫”。
在资源管理器中进入Windows2000的系统安装文件夹,打开\System32文件夹,找到$winnt$。inf文件,直接双击用记事本打开,[userdata]小节“Proctid=”后面引号中的字符串,就是Windows2000的序列号!3.WindowsXP
② 哪个操作系统采用银行家算法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()
③ 考计算机专业的研究生时考的操作系统是什么系统,是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、出错处理
④ 银行家算法
什么是银行家算法:
银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。
要解释银行家算法,必须先解释操作系统安全状态和不安全状态。
安全序列是指一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。
安全状态
如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。
不安全状态
不存在一个安全序列。不安全状态不一定导致死锁。
原理:
我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。
为保证资金的安全,银行家规定:
(1) 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;
(2) 顾客可以分歧贷款,但贷款的总数不能超过最大需求量;
(3) 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;
(4) 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金.
操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。
程序举例:
已知进程{P0,P1,P2,P3,P4},有三类系统资源A、B、C的数量分别为10、5、7,在T0时刻的资源
(1)若进程P1请求资源,发出请求向量Request1(1,0,2),编写程序用银行家算法判断系统能否将资源分配给它;
(2)若进程P2提出请求Request(0,1,0),用银行家算法程序验证系统能否将资源分配给它。
程序代码:
P1进程提出的请求,可以分配。
P2进程不能分配,因为请求的B类资源超过了它的最大值。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 50
void main()
{
unsigned int Available[MAXSIZE]; //可利用资源向量
unsigned int Max[MAXSIZE][MAXSIZE]; //最大需求矩阵
unsigned int Allocation[MAXSIZE][MAXSIZE]; //已分配矩阵
unsigned int Need[MAXSIZE][MAXSIZE]; //需求矩阵
unsigned int Request[MAXSIZE]; //请求向量
unsigned int Work[MAXSIZE]; //工作向量
bool Finish[MAXSIZE]; //是否有足够资源分配给进程,使之运行完成
unsigned int SafeSequence[MAXSIZE]; //安全序列
int i,j;
int p; //请求资源的进程的下标
int temp = 0; //安全序列下标
int total = 0;
int N;
int M;
printf("请输入进程数N=");
scanf("%d",&N);
printf("请输入资源种类数M=");
scanf("%d",&M);
//用户输入数据,初始化Available数组
printf("初始化可用资源数组:\n");
for(i=0; i<M; i++)
{
printf("\t%c类资源:",65+i);
scanf("%d",&Available[i]);
}
//用户输入数据,初始化Max数组
printf("初始化最大需求数组:\n");
for(i=0; i<N; i++)
{
printf("\tP%d进程最大需要\n",i);
for(j=0; j<M; j++)
{
printf("\t\t%c类资源:",65+j);
scanf("%d",&Max[i][j]);
}
}
//用户输入数据,初始化Allocation数组
printf("初始化已分配资源数组:\n");
for(i=0; i<N; i++)
{
printf("\tP%d进程已分配\n",i);
for(j=0; j<M; j++)
{
printf("\t\t%c类资源:",65+j);
scanf("%d",&Allocation[i][j]);
}
}
//初始化Need数组
for(i=0; i<N; i++)
for(j=0; j<M; j++)
{
Need[i][j] = Max[i][j] - Allocation[i][j];
}
//进程发出资源请求后检查
do
{
printf("资源请求:\n");
printf("\t输入请求资源的进程下标:");
scanf("%d",&p);
printf("\t进程P%d请求\n",p);
//初始化请求向量
for(i=0; i<M; i++)
{
printf("\t\t%c类资源:",65+i);
scanf("%d",&Request[i]);
}
for(i=0; i<M; i++) //检查Request <= Need ?
if(Request[i] > Need[p][i])
{
printf("\t请求的%c类资源数超过它所宣布的最大值!\n",65+i);
break;
}
if(i == M) //通过上层检查,继续检查Request <= Available ?
{
for(i=0; i<M; i++)
if(Request[i] > Available[i])
{
printf("\t尚无足够%c类资源,P%d须等待!\n",65+i,p);
break;
}
}
if(i == M) //尝试分配
{
for(i=0; i<M; i++)
{
Available[i] -= Request[i];
Allocation[p][i] += Request[i];
Need[p][i] -= Request[i];
}
}
}while(i<M);
//初始化Work,Finish向量
for(i=0; i<M; i++)
{
Work[i] = Available[i];
}
for(i=0; i<N; i++)
{
Finish[i] = false;
}
//安全性算法
do
{
total = temp;
for(i=0; i<N; i++)
{
if(Finish[i] == false)
{
for(j=0; j<M; j++)
if(Need[i][j] > Work[j])
{
break;
}
if(j == M) //各类资源都满足Need <= Work
{
for(j=0; j<M; j++)
{
Work[j] += Allocation[i][j]; //释放资源
}
Finish[i] = true;
SafeSequence[temp++] = i; //加入安全序列
}
}
}
}while(total != temp); //所有进程检查一遍之后,如果安全序列有变化,则进行下一轮
//否则说明所有的Finish都为true,或者因没有安全序列退出循环
if(temp == N)
{
printf("安全序列:");
for(temp=0; temp<N; temp++)
{
printf("P%d ",SafeSequence[temp]);
}
}
else
{
printf("系统处于不安全状态!不能分配!\n");
}
getchar();
getchar();
}
这个程序还行,输入有点麻烦,我自己编写的是用文件输入系统描述信息的,但是缺少说明,怕你搞不明白。希望对你有所帮助!