操作系统作业一

简介: 操作系统作业一

1.系统启动


1:‎要想顺利启动系统,bootsect.s必须让在磁盘的固定位置上,这个工作是由谁完的?(D)‌


A.gcc


B.vi


C.ls


D.makefile


2:启动保护模式以后,指令jmpi 0, 8执行和没有启动保护模式有何区别?( D)


A.指令的编码格式不一样


B.没有区别


C.跳转后的地址肯定不一样


D.得出跳转地址的方式不一样


3:在setup中获取内存大小这一个硬件参数的目的是什么?(B)


A.没有目的


B.为后面的内存管理做准备


C.为GDT表的初始化做准备


D.为读入内核计算内存的大小


4:在屏幕上打出“Loading System…”等系统Logo的时候,计算机内部没有正在做什么?(D)


A.初始化中断处理程序的地址


B.读磁盘


C.启动保护模式


D.等待用户输入指令


5:‌Windows系统启动和Linux系统启动时,下面哪项工作最不一样?(C)‌


A.初始化内核数据结构


B.读入内核


C.打印Logo


D.获取硬件参数


6:针对课程中的系统启动实例,下面哪个顺序是对的?(D)‎


A.BIOS, setup, bootsect, init


B.BIOS, init, bootsect, setup


C.BIOS, bootsect, init, setup


D.BIOS, bootsect, setup, init


7:‎根据GDT表,jmpi 0, 8要跳到0地址处去执行,那么能不能执行jmp 0来实现同样的跳转呢?为什么?(C)‎


A.能,因为jmp 0会跳到0地址处去执行


B.不能,因为jmp 0是非法指令


C.也可能,但首先要设置cs,并且要保证cs指向的那个GDT表项中的基地址为0


D.不能,jmp 0不查GDT表


8:针对下面的makefile,最后执行的是哪条指令?(C)‎


all: a b c‎


ld a b c –o image


‎a:a.c


‎ gcc a.c –o a


‎b:b.c


‎ gcc b.c –o b


‎c:c.c


‎ gcc c.c –o c‎


A.gcc b.c -o b


B.gcc a.c –o a


C.ld a b c –o image


D.gcc c.c –o c


9:‎下面哪项工作不是操作系统启动要完成的工作?(C)‏


A.获取硬件参数


B.初始化LDT表


C.检查硬件设备是否正常


D.读入操作系统内核


10:mem_init就是初始化一个数组,下面哪个论述不对?(C)‎


A.如果某个数组项中的内容为0,则表示对应的那一段内存空闲


B.数组中的每个项用来表示内存中一段固定大小的内存


C.mem_init调用之前可以不获得物理内存的大小


D.初始化时将所有数组项中的内容都设置为0

2.系统接口


1:用户程序调用printf(“Hello World!”)最终要通过写显存来完成Hello World!的输出,给出从用户程序到写显存中间经过的顺序。(B)‎


A.用户程序;sys_write;C函数库;系统调用;写显存


B.用户程序;C函数库;系统调用;sys_write;写显存


C.用户程序;系统调用;C函数库;sys_write;写显存


D.用户程序;C函数库;sys_write;系统调用;写显存


2:为什么要将程序的执行分为用户态和内核态?(D)‎


A.保护用户程序不被随意修改


B.不让用户程序执行某些指令


C.一个用户程序不能干扰另一个用户程序


D.保护操作系统内核


3:‌在系统调用的实现中,在int 0x80指令调用之前,给eax赋值的目的是什么?(A)


A.将来区分是哪个系统调用


B.传递参数


C.传递返回值


D.表示是0x80号中断,而不是别的中断


4:为什么要命名为系统调用,下面哪个理由不对?(C)


A.具体表现为一个函数调用


B.最终调用了操作系统提供的功能


C.直接跳转到内核中的一个函数


D.为了和其他的函数调用相区别


5:鼓励操作系统实现POSIX接口的真正目的是什么?(A)


A.上层应用程序可以移植


B.推广UNIX


C.和Windows竞争


D.让操作系统变得统一


6:‏printf(“Hello World!”)中字符串“hello World!”最终是如何传递给sys_write函数的?(C)


A.通过一段共享内存完成的


B.直接通过寄存器完成的


C.通过寄存器找到用户态内存区中该字符串的起始地址,然后利用FS段寄存器找到并读入的


D.直接通过栈完成的


7:‏应用程序中的系统调用为什么要展开成一段包含int 0x80的代码?(C)‎


A.为了代码的可重用性


B.展开成jmp指令也可以,此处只是选择int指令而已


C.int 0x80是唯一能从CPL=3(用户态)到CPL=0(内核态)的指令跳转


D.为了代码的可读性更好


8:下面哪个不是系统调用?(B)‌


A.exec


B.printf


C.open


D.fork


9:Windows的系统接口和Linux接口的不一样导致了什么样的结果?(A)


A.Windows上的程序不能在Linux上运行


B.Windows中的文件在Linux中打不开


C.Windows系统和Linux系统不能同时安装到一台机器上


D.Linux和Windows之间不能通过网络传输文件


10:在Linux上添加一个系统调用foo()的步骤,下面哪个步骤是不对的?(A)‏


A.设置int 0x80的中断处理程序入口地址


B.在系统内核中实现sys_foo()函数


C.将foo展开成一段包含int 0x80的代码


D.在int 0x80的中断处理程序中增加对sys_foo的函数调用


11写出printf("ID:%d",3)展开成write系统调用以后的形式,假设一个整数占2B.

答案:

char buf[20];
buf = “ID:3”;
write(1,buf,5);


12写出scanf("ID:%d", &id) 展开成read系统调用以后的形式.

答案:

char buf[512];
buf=&id;
read(0,buf,512);



3写出syscall3(int, write, int, fd, char *, buf, int, count)完成宏展开以后的形式。

答案:

int write(int fd,char * buf, int count)
{
long __res;
__asm(
"int 0x80"
:"=a"(__res):""(__NR_write),"b"((long)(fd)),"c"((long)(buf)),"d"((long)(count)));
if(__res>=0) retrun (int)__res;
errno = -__res;return -1;
)
}


目录
相关文章
|
3月前
|
算法 调度
详解操作系统四大常用的作业调度算法(FCFS丨SJF丨HRRN丨RR)
详解操作系统四大常用的作业调度算法(FCFS丨SJF丨HRRN丨RR)
723 0
|
6月前
|
存储 算法
操作系统作业三
操作系统作业三
364 0
|
6月前
|
算法 调度 语音技术
操作系统(3.1)--处理机调度和作业
对于大、中型多用户系统,由于CPU价格十分昂贵,致使处理机的利用率成为衡量系统性能的十分重要的指标。尽量选择计算量大的作业运行。
50 0
|
6月前
|
存储 算法 调度
操作系统作业四
操作系统作业四
63 0
|
6月前
|
算法 安全 API
操作系统作业二
操作系统作业二
71 0
|
10月前
|
存储 资源调度 算法
【操作系统--页面置换算法】C语言详解--大作业版(附代码)
该实验为作者OS课程大作业,内容若有问题,望指出,多多交流
246 0
|
存储 算法
操作系统大作业-二级页表
操作系统大作业-二级页表
210 0
操作系统大作业-二级页表
【操作系统作业】哲学家就餐问题
【操作系统作业】哲学家就餐问题
【操作系统作业】哲学家就餐问题
|
Java Linux C语言
【操作系统作业】睡觉助教(用Java的ReentrantLock实现)
【操作系统作业】睡觉助教(用Java的ReentrantLock实现)
【操作系统作业】睡觉助教(用Java的ReentrantLock实现)
|
Java 索引 Windows
【操作系统作业】数独解决方案验证器(利用多线程解决)
【操作系统作业】数独解决方案验证器(利用多线程解决)