linux期末复习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.3 什么是进程?什么是线程?Linux系统中的进程状态有哪些?如何获取系统中各进程的状态?
答:进程就是程序的一次执行过程;Linux把线程定义为进程的“执行上下文”;Linux系统中的进程状态有运行态、可中断等待态、不可中断等待态、停止态、僵死态;获取系统中各进程状态是依据一定条件和原因变化的,如下图所示:
5.5 Linux系统中进程控制块的作用是什么?它与进程有何关系?
答:进程控制块是进程组成中最关键的部分,它保存有进程的重要信息;
1) 每个进程有唯一的进程控制块。
2) 操作系统根据进程控制块.对进程实施控制和管理。
3) 进程的动态、并发等特征是利用进程控制块表现出来的。
4) 进程控制块是进程存在的唯一标志。
5.10 什么是索引节点?索引节点主要有哪些内容?它与文件有何关系?
答:索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息;
5.11 为什么要设立虚拟文件系统(VFS)?它与实际文件系统的关系是怎样的?
答:Linux系统支持多种文件系统,必须使用一种统一的接口,而VFS可以实现;VFS是建立在具体文件系统之上的,它为用户程序提供一个统一的、抽象的、虚拟的文件系统界面。
5.13 Linux系统采用哪两种内存管理技术?各自的基本实现思想是什
么?
答:Linux系统采用交换和请求分页存储管理两种内存管理技术; 1)请求分页的基本思想是,当执行一个程序时,才把它换入内存,但并不把全部程序都调入内存,而是用到哪一页就调入哪一页;2)内存交换基本思想,当系统中出现内存不足时,Linux内存管理子系统就需要释放一些内存页,从而增加系统中空闲内存页的数量。
5.16 Linux为什么要采用三级页表?该机制如何工作?
答:由于Linux系统中页面的大小为4GB,进程虚存空间要划分为个页面。如果直接用页表描述这种映射关系,那么每个进程的面表就要有
个表项,而用大量的内存资源来存放页表办法是不可取,故Linux采用三级页表;
把一个线性地址映射成物理地址就分为以下四步:
1)以线性地址中最高位段作为下标在PGD中找到相应的表现,该表项指向相应的PMD.
2)以线性地址中第二个位段作为下标在PMD中找到相应的表项,该表项指向相应的PT。
3)以线性地址中第三个位段作为下标在PT中找到相应的表项,该表项指向相应的物理页面(即该物理页面的起始地址)
4)以线性地址中的最低位段是物理页面内的相对位移量,此位移量与该物理页面的起始地址相加就得到相应的物理地址。
5.22 Linux系统中怎样处理系统调用?
答:Linux的系统调用是通过中断指令“INT 0x80”实现的,当CPU执行到中断指令“INT 0x80”时,硬件就做出一系列响应。CPU穿过陷阱门,从用户空间进入系统空间。相应地,进程的上下文从用户堆栈切换到系统堆栈。接着运行内核函数system_call()。首先,进一步保存各寄存器内容;接着调用system_trace(),以系统调用号为下标检索系统调用入口表
sys_call_table,从中找到相应的函数;然后,转去执行该函数,完成具体的服务。
4.14 不要论算法,仅仅是用shell实现
#!/bin/bash
a=1
echo -ne "前十个数为:\n$a "
b=1
echo -ne "$b "
count=10
let sum=$a+$b
while [ $((count)) -gt 2 ] ;do
let tmp=$a+$b
echo -ne "$tmp "
a=$b
b=$tmp
let sum=$sum+$b
let count=$count-1
done
echo -e "\n和为:$sum"
4.18
#!/bin/bash
if [ $# -eq 2 ] && [ $1 -gt 0 ] && [ $2 -ge $1 ] ;then echo -n "Input a line:"
read line
length=`echo $line | awk '{print length($0)}'`
if [ $2 -gt $length ];then
echo "截取长度不合适"
exit 2
fi
echo "$line $1 $2" | awk '{print substr($0,$(NF-1),$NF-$(NF-1)+1)}'
else
echo "Usage:$0 a-int a-int"
exit 1
fi
7.3
#include
#include
#include
#include
#include
#include
#define BUF_SIZE 1024*8
int main()
{
int fds, fdd;
char buf[BUF_SIZE];
size_t hasread = 0;
fds = open("filea", O_RDONLY);
fdd = open("fileb", O_WRONLY, O_CREAT);
if(fds && fdd)
{
while((hasread = read(fds, buf, sizeof(buf))) > 0) {
write(fdd, buf, hasread);
}
close(fds);
close(fdd);
}
}
7.5
#include
03 #include
04