一些操作系统原理题目!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一些操作系统原理题目!相关的知识,希望对你有一定的参考价值。

判断题
1. 采用分页存储管理时要求逻辑地址是连续的,作业装入主存后的绝对地址也是连续的。
2. 通道又称 I/O 处理机,它实现主存和外设之间的信息传输,并与CPU并行工作。()
3.P、V操作可以解决一切互斥问题。( )
4. 进程是指令的集合。( )
5. 采用虚拟存储器技术的首要目的是为了实现存储保护。( )
6. 操作系统的存储器管理部分负责对进程进行调度。( )
7. 顺序式文件结构不利于文件长度的动态增长。( )
8. 快表是高速缓存,是内存的一部分区域。( )
9. 原语操作是不可被中断的。( )
10. 从文件管理角度看,文件是由FCB和文件体两部分组成( )
选择题
11. 系统中,象键盘、终端、打印机等以字符为单位组织和处理信息的设备称为( )。
A.字符设备B.块设备C.虚拟设备D.独享设备
12. 文件系统是指( )。
A.文件的集合B.文件的目录C.实现文件管理的一组软件D.文件、管理文件的软件及数据结构的总体
13. 设备管理的缓冲技术的缓冲池在( )中。
A.主存中 B.外存 C.ROM D.寄存器
14. 在固定分区分配中,每个分区的大小是( )。
A.相同B.随作业长度变化C.可以不同但预先固定D.可以不同但根据作业长度固定
15. 作业在执行中发生了缺页中断,经系统将该缺页调入内存后,应继续执行( )。
A.被中断的前一条指令B.被中断的指令 C.被中断的后一条指令D.程序的第一条指令
16. 若P、V操作的信号量S的初值为2,当前值为-1,则有( )个等待进程。
A.0. B.1 C.2 D.3
17. N个进程共享M台打印机(其中N>M),假设每台打印机为临界资源,必须独占使用,则打印机的互斥信号量的取值范围为( )。
A.-(N-1)~M B.-(N-M)~M. C.-(N-M)~1 D.-(N-1)~1
18. 银行家算法是一种( )算法。
A. 死锁解除 B.死锁避免C. 死锁预防D.死锁检测
19. ( )操作系统允许用户把若干个作业提交给计算机系统。
A.单用户 B.分布式C.批处理 D.监督
20. 火车站的售票系统属于( )。
A.单道批处理系统B.多道批处理系统C.实时系统 D.分时系统
21. 为方便用户,操作系统负责管理和控制计算机系统的( )。
A. 软件资源B. 硬件和软件资源. C. 用户有用资源D. 硬件资源
22. 正在运行的进程在信号量S上操作P操作之后,当S<0,进程将进入信号量的( )。
A.等待队列 B.提交队列 C.后备队列 D.就绪队列
23. P、V操作是 ( )
A.两条低级进程通信原语. B.两组不同的机器指令C.两条系统调用命令
D.两条高级进程通信原语
24. 设备分配问题中,算法实现时,同样要考虑安全性问题,防止在多个进程进行设备请求时,因相互等待对方释放所占设备所造成的( )现象
A.瓶颈B.碎片 C.系统抖动 D.死锁
25. 把作业地址空间中使用的逻辑地址变成内存中物理地址的过程称为( )。
A.重定位B.物理化 C.逻辑化 D.加载
26. 进程间的同步是指进程间在逻辑上的相互( )关系。
A. 联接 B. 制约 C.继续D. 调用
27. 常用的文件存取方法有两种:顺序存取和( )存取。
A. 流式 B. 串联C. 索引D. 随机
28. 并发进程之间( )。
A.彼此无关 B.必须同步 C.必须互斥D.可能需要同步或互斥
29. 分配到必要的资源并获得处理机时的进程状态是( )
A.就绪状态B.执行状态 C.阻塞状态 D.撤消状态
30. 进程地址空间中逻辑地址变成内存中物理地址的过程叫做( )。
A. 重定位B. 物理化C. 逻辑化 D. 加载

请高手做下,保质保量的话再加上50分!(11.15号前做完)
填空题
31.文件的三种物理结构是 、 和 。
32. 在请求分页系统中,反复进行“入页”和“出页”的现象称为 。
33.死锁的四个必要条件分别为:互斥条件、 、 和环路等待条件。
34.在可变分区存储管理中,分区的保护通常采用 和 两种方式。
35. 用户与操作系统之间的接口主要分为 和 两类。
简答题
36. 什么是文件?什么是目录?
37.试论述分页存储管理和分段存储管理技术的主要区别。
38.I/O设备管理是操作系统的主要功能之一,请简要回答,操作系统设计种,I/O软件的主要功能目标和主要层次。
39. 操作系统以进程为单位分配各种资源,进程调度是操作系统必须完成的重要任务,请简要回答,操作系统有哪两种进程调度方式?并举出至少4种不同类型的进程调度算法。
40.什么是进程?进程和程序的主要区别是什么?

错对错错错 错对对对对(第十个不太确定)
/***************************/
ADCCB
BBBBC
BAADA
BDDBA
/***************************/
连续文件、串联文件、随机文件
抖动现象
请求与保持条件、 不剥夺条件
/****这个问题没有见过*******/
用户接口、程序接口
/****************************/
文件是一组赋名的相关字符流的集合,或者是相关联的记录,目录是由文件的目录信息构成的特殊文件。该文件的内容不是各种程序或应用数据,而是用来检索普通文件的目录信息。
/****************************/
1、页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需要。
2、页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。
3、分页的作业地址空间是维一的,即单一的线性空间,程序员只须利用一个记忆符,即可表示一地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
/****************************/
答案:I/O软件的功能目标:
解决同步(阻塞)-异步(传输)问题
实现对设备访问的错误处理
实现设备无关性——统一命名法
实现对专有设备和共享设备的有效管理
I/O软件的主要层次:
用户层软件-设备无关操作系统软件-设备驱动程序-中断处理程序
/******************************/
两种调度方式:可剥夺调度和不可剥夺调度方式.
四种调度算法:时间片轮转,优先级调度,多重队列,最短作业优先,保证调度,彩票调度,实时调度,两级调度法等,任选四种即可
/*****************************/
进程是并发执行的程序在执行过程中非配和管理资源的基本单位。
区别:
进程是动态的,程序是静态的,程序是有序代码的集合;进程是程
序的执行;进程是暂时的,程序的永久的,进程是一个状态变化的过程,
程序可长久保存;进程与程序的组成不同,进程的组成包括程序,数据
和进程控制块(即进程状态信息);通过多次执行,一个程序可对应多
个进程;通过调用关系,一个进程可包括多个程序.
参考技术A 1-10 FTFFF FTFTT
11-20 ADACB BBBCD
21-30 BAADA BDDBA
**********************************
31 顺序结构、链接结构、索引结构
32 抖动
33 请求并保持、不剥夺
34 上下限寄存器、基址和限长寄存器
35 命令接口、程序接口
**********************************
36、文件:文件是指存储在外存上的信息集合。
目录:为了有效地利用存储空间并迅速准确地完成由文件名到文件物理位置的转换,必须把与文件相关的文件名等信息按一定的组织结构进行排列,这主要是依赖于文件目录来实现。
**********************************
37、分段:将作业分段,每段大小不同。在给段分配主存时是采用了可变分区管理方式。作业的逻辑地址表示为“段号|段内地址”,地址保护有段号越界和段内地址越界两种保护

。地址是二维的。
分页:将作业分页,每页大小相等,内存按页大小分块。作业的逻辑地址表示为“页号|页内地址”,地址保护只有页号越界保护。地址是一维的。
**********************************
38、功能:1、把抽象要求转化为具体要求 2、检查用户输入输出请求的合法性,了解输入输出设备的状态,传递有关参数,设置设备的工作方式。3、发出输入输出指令,启动分

配到的输入输出设备,完成指定的输入输出操作。4、及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理程序进行处理。5、是对设置有通道的计算

机系统,驱动程序还应根据用户的输入输出请求,自动构成通道程序。
**********************************
39、抢占式和非抢占式(或剥夺方式和非剥夺方式)
先来先服务调度法、短进程优先调度法、响应比高者优先调度法、优先权调度法、轮转法、多级队列法、多级反馈队列调度法
**********************************
40、进程是程序在一个数据集合上的一次运行过程。
区别:1.进程是程序在处理机上的一次运行过程,是动态的概念;而程序是代码的有序集合,其本身没有任何运行的含义,是静态的概念。
2.进程是一个状态变化的过程,是有生命周期的(表现在它因为创建而产生,因调度而执行,因得不到资源儿暂停,因撤销而消亡);而程序是永久的可以长久保存。
3.进程与程序组成不同。进程由程序、数据和进程控制块组成,而程序仅是代码的有序集合。
4.进程与成之间不是一一对应的。通过多次运行,同一程序可对应多个进程;通过调用关系,一个进程可以包含多个程序
参考技术B 太多了 没有那么多时间回答 建议你去百度一个个找吧 呵呵

编译原理的一些练习题

这里收集了sicily的陈炬桦老师编译原理实验课程的题目,曝上代码以供参考。

(如果这里的代码对您的思路有些许启发的话,请您点击一下推荐,给予作者写作的鼓励,不胜感谢!)

1-词法分析

题目1000:     

技术分享
 1 1000. 词法分析程序设计
 2 总提交数量:    183    通过数量:    138
 3            
 4 时间限制:1秒    内存限制:256兆
 5 题目描述
 6 设一语言的关键词、运算符、分界符的个数与单词如下: 
 7 struct { int number; string str[10]; } keywords={3,"int","main","return"} ; //关键词
 8 struct { int number; string str[10]; } operators ={5,"+","*","=","+=","*="}; //运算符
 9 struct { int number; string str[10]; } boundaries ={6,"(",")","{","}",",",";"} ; //分界符
10 struct { int number; string str[100];} identifieres={0}; //标识符
11 struct { int number; string str[100];} Unsigned_integer={0}; //无符号整数
12 以上类号分别为1~5,序号从0开始;
13 标识符是字母开头的字母数字串;常量为无符号整数;
14 用C++设计一程序实现词法分析。
15 
16 输入格式
17 输入一程序,结束符用”#”;
18 
19 输出格式
20 输出单词数对:<类号,序号>。 输出标识符表,用空格分隔; 输出无符号整数表,用空格分隔;
21 
22 样例输入
23  将样例输入复制到剪贴板
24 main()
25 { int a=2,b=3;
26   return 2*b+a;
27 }#
28 样例输出
29 <1,1><3,0><3,1><3,2><1,0><4,0><2,2><5,0><3,4><4,1><2,2><5,1><3,5><1,2><5,0><2,1>
30 <4,1><2,0><4,0><3,5><3,3>
31 identifieres:a b
32 Unsigned_integer:2 3
View Code

AC代码:

技术分享
 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 struct { int number; string str[10]; } keywords={3,"int","main","return"} ;         //关键词 
 6 struct { int number; string str[10]; } operators ={5,"+","*","=","+=","*="};        //运算符 
 7 struct { int number; string str[10]; } boundaries ={6,"(",")","{","}",",",";"} ;    //分界符 
 8 struct { int number; string str[100];} identifieres={0};                            //标识符 
 9 struct { int number; string str[100];} Unsigned_integer={0};                        //无符号整数 
10 
11 char k=0;
12 string st=""; 
13 int main(){
14     int i;    char ch;  bool nochar=1;     
15     
16     do{
17         if(nochar)cin.get(ch);
18         if(ch==(){st+="<3,0>";nochar=1;} 
19         else if(ch==)){ st+="<3,1>";nochar=1; }    
20         else if(ch=={){ st+="<3,2>";nochar=1; }  
21         else if(ch==}){ st+="<3,3>";nochar=1; }    
22         else if(ch==,){ st+="<3,4>";nochar=1; }    
23         else if(ch==;){ st+="<3,5>";nochar=1; }      
24         else if(ch==+){
25             cin.get(ch); 
26             if(ch===){    
27                 st+="<2,3>";nochar=1;  
28             } 
29             else{
30                 st+="<2,0>";nochar=1;     
31             } 
32         }
33         else if(ch==*){
34             cin.get(ch); 
35             if(ch===){
36                 st+="<2,4>";nochar=1;
37             } 
38             else{
39                 st+="<2,1>";nochar=1;     
40             } 
41         }
42         else if(ch===){
43             st+="<2,2>";nochar=1;      
44         }
45         else if(0<=ch&&ch<=9){
46             string nstring=""; nochar=0;
47             do{
48                 nstring+=ch;
49                 cin.get(ch); 
50             } while(0<=ch&&ch<=9);
51             for(k=0;k<Unsigned_integer.number&&Unsigned_integer.str[k]!=nstring;k++ );
52     
53             if(k==Unsigned_integer.number ){
54                 Unsigned_integer.str[k] = nstring;
55                 st+="<5,";st+=char(0+k); st+=">";
56                 Unsigned_integer.number++;  
57             }
58             else{ 
59                 st+="<5,";st+=char(0+k);st+=">";   
60             }
61         }
62         else if(a<=ch&&ch<=z||A<=ch&&ch<=Z){ 
63             string nstring="";nochar=0;
64             do{
65                 nstring+=ch;
66                 cin.get(ch);
67             } while(a<=ch&&ch<=z||A<=ch&&ch<=Z) ;  //读入关键字或者标示符的东西 
68             
69             for(k=0;k<= keywords.number &&keywords.str[k]!=nstring;k++ );               
70             if(k<keywords.number ){
71                 //测得输入字符是关键字之一 
72                 st+="<1,";   st+=char(0+k);st+=">";   
73             }                  
74             else{
75                 //测得输入字符不是关键字之一,而是标识符   
76                 for(k=0;k<identifieres.number && identifieres.str[k]!=nstring;k++ );    //检查是否是已经记录过的标识符 
77                 if(k==identifieres.number ){                //不是已经标识过的标识符 
78                     identifieres.str[k]=nstring;
79                     st+="<4,";st=st+char(0+k);st+=">";   
80                     identifieres.number++;  
81                 }
82                 else{
83                     st+="<4,";st=st+char(0+k);st+=">"; 
84                 }
85             }
86         }
87         else nochar=1;  
88        
89     } while(ch!=#);
90     
91     cout<<st<<endl;
92     cout<<"identifieres:";
93         for(i=0;i<identifieres.number;i++ ){cout<<identifieres.str[i]<<" ";}    cout<<endl;
94     cout<<"Unsigned_integer:"; 
95         for(i=0;i<Unsigned_integer.number;i++ ){cout<<Unsigned_integer.str[i]<<" ";}   cout<<endl;
96     
97     return 0;    
98 }               
99   
View Code

-----------------------------------

题目1001:     

技术分享
 1 1001. 输入输出文法1
 2 总提交数量:    95    通过数量:    53
 3            
 4 时间限制:1秒    内存限制:256兆
 5 题目描述
 6  
 7 
 8 设文法的非终结符,终结符,产生式为,开始符号为
 9 struct  { int Nv;string VN[10];} Vns={3,"E","T","F"};
10 struct  { int Nt;string VT[10];} Vts={7,"+","-","*","/","(",")","i"};
11 struct  { int Np;string PL[20],PR[20];} ps={0};
12 string S="E"; 
13  
14 输入产生式的个数,
15 分别输入产生式的左边和右边符号
16  
17 按非终结符顺序输出产生式
18 输入格式
19  8
20 E E+T
21 T T*F
22 E T
23 T F
24 F (E)
25 F i
26 E E-T
27 T T/F
28 
29 输出格式
30 G[E]:
31 E::=E+T | T | E-T
32 T::=T*F | F | T/F
33 F::=(E) | i
34 
35 样例输入
36  将样例输入复制到剪贴板
37 6
38 E E+T
39 T T*F
40 E T
41 T F
42 F (E)
43 F i
44 样例输出
45 G[E]:
46 E::=E+T | T
47 T::=T*F | F
48 F::=(E) | i
View Code

AC代码:

技术分享
#include <iostream>
#include <string>
using namespace std;

struct  { int Nv;string VN[10];} Vns={3,"E","T","F"};
struct  { int Nt;string VT[10];} Vts={7,"+","-","*","/","(",")","i"};
struct  { int Np;string PL[20],PR[20];} ps={0};
string S="E"; 

int main(){
    int num;    cin>>num; num++;    
    string temp;     int k;
    string result[Vns.Nv]; 
    while(num--){
        getline(cin,temp);
        for(k=0;k<Vns.Nv;k++ ){
            if(temp.substr(0,1)==Vns.VN[k] ) {
                result[k]+=temp.substr(2) + " | ";
                break;
            } 
        }
    }
    for(k=0;k<Vns.Nv;k++){
        result[k] = result[k].substr(0,result[k].length()-3 );
    }    
    
    cout<<"G["<<S<<"]:\\n";
    for(k=0;k<Vns.Nv;k++){
        cout<<Vns.VN[k]<<"::="<<result[k]<<endl; 
    }
} 
View Code

-----------------------------------

题目1002:     

技术分享
 1 1002. 输入输出文法2
 2 总提交数量:    76    通过数量:    53
 3            
 4 时间限制:1秒    内存限制:256兆
 5 题目描述
 6  输入开始符号,非终结符,终结符,产生式
 7 按非终结符顺序输出产生式;
 8 
 9 输入格式
10  输入开始符号;
11 非终结符个数,非终结符,空格符分隔;
12 终结符个数,终结符,空格符分隔;
13 产生式的个数,各产生式的左边和右边符号,空格符分隔;
14 
15 输出格式
16  G[开始符号]:
17 按非终结符顺序输出各产生式;
18 
19 样例输入
20  将样例输入复制到剪贴板
21 Z
22 8 Z E F P G T Q S
23 3 + * i
24 18
25 Z E+T
26 E E
27 P G
28 F F
29 P G
30 G G
31 T T*i
32 Q E
33 S i
34 E S+F
35 F FP
36 G GG
37 Q E+F
38 E T
39 F P
40 G F
41 Q T
42 Q S
43 样例输出
44 G[Z]:
45 Z::=E+T
46 E::=E | S+F | T
47 F::=F | FP | P
48 P::=G | G
49 G::=G | GG | F
50 T::=T*i
51 Q::=E | E+F | T | S
52 S::=i
View Code

AC代码:

技术分享
 1 #include <iostream>
 2 #include <string>
 3 #include <stdlib.h>
 4 using namespace std;
 5 
 6 struct  { int Nv;string VN[10];} Vns={0};
 7 struct  { int Nt;string VT[10];} Vts={0};
 8 struct  { int Np;string PL[20],PR[20];} ps={0};
 9 string S=""; 
10 
11 int main(){
12     cin>>S;
13     cin>>Vns.Nv ;
14     for(int i=0;i<Vns.Nv;i++ ){
15         cin>>Vns.VN[i];
16     }
17     
18     cin>>Vts.Nt ;
19     for(int i=0;i<Vts.Nt;i++ ){
20         cin>>Vts.VT[i] ;
21     }  
22 
23     int num;    cin>>num; num++;    
24     string temp;     int k;
25     string result[Vns.Nv]; 
26     while(num--){
27         getline(cin,temp);
28         for(k=0;k<Vns.Nv;k++ ){
29             if(temp.substr(0,1)==Vns.VN[k] ) {
30                 result[k]+=temp.substr(2) + " | ";
31                 break;
32             } 
33         }
34     }
35     for(k=0;k<Vns.Nv;k++){
36         result[k] = result[k].substr(0,result[k].length()-3 );
37     }    
38     
39     cout<<"G["<<S<<"]:\\n";
40     for(k=0;k<Vns.Nv;k++){
41         cout<<Vns.VN[k]<<"::="<<result[k]<<endl; 
42     }
43 } 
View Code

----------------------------------

题目1003:     

技术分享
 1 1003. 输入文法压缩自产生式文法和不可达文法
 2 总提交数量:    122    通过数量:    59
 3            
 4 时间限制:1秒    内存限制:256兆
 5 题目描述
 6  输入开始符号,非终结符,终结符,产生式
 7 压缩自产生式文法和不可达文法后,按非终结符顺序输出产生式;
 8 
 9 输入格式
10  
11 输入开始符号;
12 非终结符个数,非终结符,空格符分隔;
13 终结符个数,终结符,空格符分隔;
14 产生式的个数,各产生式的左边和右边符号,空格符分隔;
15 
16 输出格式
17  
18 delete self production:自产生式文法
19 unreached Vn:不可达非终结符
20 delete production:不可达产生式
21 delete VN:不可达非终结符
22 G[开始符号]:
23 压缩自产生式文法和不可达文法后,按非终结符顺序输出各产生式;
24 
25 样例输入
26  将样例输入复制到剪贴板
27 Z
28 8 Z E F P G T Q S
29 3 + * i
30 18
31 Z E+T
32 E E
33 P G
34 F F
35 P G
36 G G
37 T T*i
38 Q E
39 S i
40 E S+F
41 F FP
42 G GG
43 Q E+F
44 E T
45 F P
46 G F
47 Q T
48 Q S
49 样例输出
50 delete self production:E::=E
51 delete self production:F::=F
52 delete self production:G::=G
53 unreached Vn:Q
54 delete production:Q::=E
55 delete production:Q::=E+F
56 delete production:Q::=T
57 delete production:Q::=S
58 delete VN:Q
59 G[Z]:
60 Z::=E+T
61 E::=S+F | T
62 F::=FP | P
63 P::=G | G
64 G

以上是关于一些操作系统原理题目!的主要内容,如果未能解决你的问题,请参考以下文章

《数据库原理》复试面试篇

自动控制原理学习笔记------一些认识

操作系统的哲学原理,以及一些性能测试中的数据分析

编译原理的一些练习题

高薪程序员&面试题精讲系列18之for和foreach的区别原理,哪个效率更高?

oracle原理练习题目