1.Unix *** 作系统允许用户在汇编语言上使用系统调用
Lunix *** 作系统允许用户在C语言上使用系统调用
2.能加快虚实地址转换的是: 1).增大块表TLB容量 2).让页表常驻内存.
当cpu要访问一个虚拟地址/线性地址时,CPU会首先根据虚拟地址的高20位(20是x86特定的,不同架构有不同的值)在TLB中查找。如果是表中没有相应的表项,称为TLB miss,需要通过访问慢速RAM中的页表计算出相应的物理地址。同时,物理地址被存放在一个TLB表项中,以后对同一线性地址的访问,直接从TLB表项中获取物理地址即可,称为TLB hit。
3.查到的常用同步 进程间的同步机制:信号量 互斥锁 事件 计时器这4种配合等待函数 线程间的同步:volatile变量、interlocked系列函数、SRW读写锁(vista系统及以上)、临界区
4.线程通信:互斥量,信号量,事件,临界区。
进程通信:管道、消息队列、套接字、信号量、信号、共享内存。
5.1).EXT2和EXT3使用索引节点来记录文件信息,索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。EXT2并不包含文件的创建时间,EXT3包含。
2)EXT2写入资料会写入缓存中,写满以后再写入硬盘 EXT3会写入缓存中,通知journal,再写入硬盘,再通知journal。(区别:EXT2开机检查有效位,如果错误从硬盘头查错误,EXT3查询journal如果有错误很快就能知道错误在哪。)
3)EXT3支持16TB文件系统和最大2TB文件 EXT4支持1EB和16TB文件.
6. *** 作系统是什么?
系统观点——计算机资源的管理者
用户观点——用户使用计算机的界面
软件观点——程序和数据结构的集合
7.删除文件不需要删除文件所在的目录,而文件的关联目录项和文件控制块需要随着文件一同删除,同时释放文件的关联缓冲区。
8.
1.先来先服务调度算法(FCFS):就是按照各个作业进入系统的自然次序来调度作业。这种调度算法的优点是实现简单,公平。其缺点是没有考虑到系统中各种资源的综合使用情况,往往使短作业的用户不满意,因为短作业等待处理的时间可能比实际运行时间长得多。 因此选A;
2.短作业优先调度算法 (SPF): 就是优先调度并处理短作业,所谓短是指作业的运行时间短。而在作业未投入运行时,并不能知道它实际的运行时间的长短,因此需要用户在提交作业时同时提交作业运行时间的估计值。
3.最高响应比优先算法(HRN):FCFS可能造成短作业用户不满,SPF可能使得长作业用户不满,于是提出HRN,选择响应比最高的作业运行。响应比=1+作业等待时间/作业处理时间。 因此选C;
4. 基于优先数调度算法(HPF):每一个作业规定一个表示该作业优先级别的整数,当需要将新的作业由输入井调入内存处理时,优先选择优先数最高的作业。
1.
"%5s",表示输出至少5个字符,不够的话,左侧用空格补。
%.5s,最多输出5个字符
unsigned char在32位机的存储范围是0~255 一个字节2的8次方。
2.浮点数不满足加法交换律和结合律。浮点数存在误差,如果直接相减会出现错误
条件0.9f == 0.9 的值为真
条件9 == 0.9*10 的值为真
浮点数存在误差,直接比较大小往往不是预期的结果;通常引入一个比要求精度还要小几个数量级的实数epsilon来帮助比较大小。在我的机器上,精度取1e-8,0.9f == 0.9为假(0.9f是单精度浮点,精度比0.9低)。浮点数不能进行位运算。
3.
int a, b; int c = (a = 2, b = 3, b++); cout << c << endl; //输出3
int a, b; int c = (a = 2, b = 3, b++,a+b); cout << c << endl; //输出6
4.
void f3(int(*p)[4]);
int a[4]={1,2,3,4},
int b[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
f3(&a);
f3(b[1]);
f3(&b[1]);
f3(b);
选项A 数组a是数组首元素地址,加上&表示数组的地址,是可行的,并且有点区别。
选项B和C
b[1]和&b[1]虽然值相等,但是含义不一样,&b[1]是行指针,类型是int (*)[4],和a的类型相同;而b[1]是个int *,和&b[1][0]等价。
5.
下面代码段有哪些安全问题()
#include
#include
int main(int argc, char **argv) {
char cat[] = "cat ";
char *command;
size_t commandLength;
commandLength = strlen(cat) + strlen(argv[1]) + 1;
command = (char *)malloc(commandLength);
strncpy(command, cat, commandLength);
strcat(command, argv[1]);
system(command);
return (0);
}
答案:A B D
分析:字符处理函数strcpy()、strcat()都是不安全的,建议使用strncpy()、strncat(),程序没有对输入合法性进行检查,因此用户可以采用一定手段构造command injection 进行攻击。
6.
int main() {
char ch = -1;
printf(" %02x, %02x", ch, (unsigned char)ch);
return 0;
}
会输出ffffffff ,ff
感觉上面的都没回答到点上;
%x默认输出unsigned int;
所以char会被自动扩展至unsigned int;
因此会扩展符号位;
而unsigned char扩展至unsigned int;
会直接用0填充;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)