1 如下描述中,错误的是____。
SATA硬盘因为有机械部件,随机读写时会发生磁头的物理运动。主流硬盘的平均寻道时间在几毫秒到几十毫秒
SATA硬盘读写的最小单位是扇区,扇区的大小是512字节或者4k
文件系统读写硬盘的最小单位也是扇区
SSD支持随机读写.但是一般读性能要好于写性能
SSD的随机读写延时要比SATA低两个数量级
SSD根据使用技术的不同,写的寿命是有限的,需要软件进行写优化,确保存储单元的写次数基本同步增长
2.ssd硬盘:
固态硬盘(Solid State Drives),
适合于个人用户使用。
一般它擦写次数普遍为3000次左右,以常用的64G为例,在SSD的平衡写入机理下,可擦写的总数据量为64G X 3000 = 192000G
3.文件系统:是抽象与操作系统之上的,
文件系统一般按照
Cluster
大小,有时候也称为
Block
大小来读写数据,这个
Cluster
一般最小的
4K
,大的定为
32K
、
64K
等都可以,主要根据应用的不同。比如
Oracle
的应用一般就用
4K
或
8K
的
Block
大小,大文件读写就用
128K
甚至
256K
都可以
文件系统是抽象与操作系统之上的,
文件系统一般按照
Cluster
大小,有时候也称为
Block
大小来读写数据,这个
Cluster
一般最小的
4K
,大的定为
32K
、
64K
等都可以,主要根据应用的不同。比如
Oracle
的应用一般就用
4K
或
8K
的
Block
大小,大文件读写就用
128K
甚至
256K
都可以。
4 以下哪种方式,在读取磁盘上多个顺序数据块时的效率最高?
中断控制方式
DMA方式
通道方式
程序直接访问方式
循环检查I/O方式
以上访问方式都一样
答案选C,通道方式。
(1)程序直接访问方式跟循环检测IO方式,应该是一个意思吧,是最古老的方式。CPU和IO串行,每读一个字节(或字),CPU都需要不断检测状态寄存器的busy标志,当busy=1时,表示IO还没完成;当busy=0时,表示IO完成。此时读取一个字的过程才结束,接着读取下一个字。
(2)中断控制方式:循环检测先进些,IO设备和CPU可以并行工作,只有在开始IO和结束IO时,才需要CPU。但每次只能读取一个字。
(3)DMA方式:Direct Memory Access,直接存储器访问,比中断先进的地方是每次可以读取一个块,而不是一个字。
(4)通道方式:比DMA先进的地方是,每次可以处理多个块,而不只是一个块。
I/O中断方式是以字节为单位,DMA控制方式是以一个连续的数据块为单位,I/O通道控制方式是DMA控制方式的发展,是以一组数据块为单位的,即可以连续读取多个数据块。
5 下列不是进程间的通信方式的是()
管道
回调
共享内存
消息队列
socket
信号量
# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
# 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
# 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
# 回调: 是一种编程机制
6 同一个进程中的线程不共享的部分是()
信号
堆
文件描述符
进程组id
代码段
栈空间
线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。
进程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性。这些个性包括:
1.线程ID 每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标
识线程。
2.寄存器组的值 由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线
程切换到另一个线程上 时,必须将原有的线程的寄存器集合的状态保存,以便
将来该线程在被重新切换到时能得以恢复。
3.线程的堆栈
堆栈是保证线程独立运行所必须的。 线程函数可以调用函数,而被调用函数中又是可以层层嵌套的,所以线程
必须拥有自己的函数堆栈, 使得函数调用可以正常执行,不受其他线程的影
响。
4.错误返回码 由于同一个进程中有很多个线程在同时运行,可能某个线程进行系统调用
后设置了errno值,而在该 线程还没有处理这个错误,另外一个线程就在此时
被调度器投入运行,这样错误值就有可能被修改。 所以,不同的线程应该拥有自己的错误返回码变量。
5.线程的信号屏蔽码 由于每个线程所感兴趣的信号不同,所以线程的信号屏蔽码应该由线程自己管理。但所有的线程都共享同样的信号处理器。
6.线程的优先级 由于线程需要像进程那样能够被调度,那么就必须要有可供调度使用的参数,这个参数就是线程的优先级。
涉及多线程程序涉及的时候经常会出现一些令人难以思议的事情,用堆和栈分配一个变量可能在以后的执行中产生意想不到的结果,而这个结果的表现就是内存的非法被访问,导致内存的内容被更改。 理解这个现象的两个基本概念是:在一个进程的线程共享堆区,而进程中的线程各自维持自己堆栈。
在 windows 等平台上,不同线程缺省使用同一个堆,所以用 C 的 malloc (或者 windows 的 GlobalAlloc)分配内存的时候是使用了同步保护的。如果没有同步保护,在两个线程同时执行内存操作的时候会产生竞争条件,可能导致堆内内存管理混乱。比如两个线程分配了统一块内存地址,空闲链表指针错误等。 Symbian 的线程一般使用独立的堆空间。这样每个线程可以直接在自己的堆里分配和释放,可以减少同步所引入的开销。当线程退出的时候,系统直接回收线程的堆空间,线程内没有释放的内存空间也不会造成进程内的内存泄漏。 但是两个线程使用共用堆的时候,就必须用 critical section 或者 mutex 进行同步保护。否则程序崩溃时早晚的事。如果你的线程需要在共用堆上无规则的分配和释放任何数量和类型的对象,可以定制一个自己的 allcator,在 allocator 内部使用同步保护。线程直接使用这个 allocator 分配内存就可以了。这相当于实现自己的 malloc,free。但是更建议你重新审查一下自己的系统,因为这种情况大多数是不必要的。经过良好的设计,线程的本地堆应该能够满足大多数对象的需求。如果有某一类对象需要在共享堆上创建和共享,这种需求是比较合理的,可以在这个类的 new 和 delete 上实现共享保护。
7-------下面关于系统调用的描述中,错误的是()
系统调用把应用程序的请求传输给系统内核执行
系统调用中被调用的过程运行在"用户态"中
利用系统调用能够得到操作系统提供的多种服务
是操作系统提供给编程人员的接口
系统调用给用户屏蔽了设备访问的细节
系统调用保护了一些只能在内核模式执行的操作指令
8 在动态分区分配方案中,系统回收主存,合并空闲空间时需修改空闲区表,以下哪种情况空闲区会减1?
只要回收主存,空闲区数就会减一
空闲区数和主存回收无关
无上邻空闲区,也无下邻空闲区
有上邻空闲区,但无下邻空闲区
有下邻空闲区,但无上邻空闲区
有上邻空闲区,也有下邻空闲区
在分区分配方案中,回收一个分区时有几种不同的邻接情况,在各种情况下应如何处理? 答:有四种:上邻,下邻,上下相邻,上下不相邻。
(1)回收分区的上邻分区是空闲的,需要将两个相邻的空闲区合并成一个更大的空闲区,然后修改空闲区表。
(2)回收分区的下邻分区是空闲的,需要将两个相邻的空闲区合并成一个更大的空闲区,然后修改空闲区表。
(3)回收分区的上、下邻分区都是空闲的(空闲区个数为2),需要将三个空闲区合并成一个更大的空闲区(空闲区个数为1 ),然后修改空闲区表、
(4)回收分区的上、下邻分区都不是空闲的,则直接将空闲区记录在空闲区表中。
A:错误,因为回收主存时,要根据相邻分区空闲情况决定空闲分区个数,如果不考虑合并的话,空闲分区个数增加一个,因为可能发生合并情况,所以可能- ,可能不变;
B:由上知,错误;
C:无上邻空闲区,也无下邻空闲区,不需要合并空闲分区,空闲分区个数加1;
D:有上邻空闲区,但无下邻空闲区,需要将刚刚的空闲分区表的起始地址修改为上邻空闲区的起始地址和空闲分区大小,但是空闲分区个数不变;
E:有下邻空闲区,但无上邻空闲区,刚刚的空闲分区表起始位置不用改变,空闲分区大小改变,空闲分区个数不变;
F:有上邻空闲区,也有下邻空闲区,假设原来是2个空闲分区,新回收一个,发现前后都是空闲的,将三个合并为1个,最后结果为1个空闲分区,空闲分数个数减1
---------下面所述步骤中,不是创建进程所必须的步骤是?
由调度程序为进程分配CPU
建立一个进程控制块
为进程分配内存
将进程控制块链入就绪队列
1,申请空白PCB(进程控制块); 2,为新进程分派资源; 3,初始化PCB; 4,将新进程插入就绪队列;----------------- 有一个虚拟存储系统,若进程在内存中占3页(开始时内存为空),若采用先进先出(FIFO)页面淘汰算法,当执行如下访问页号序列后1,2,3,4,5, 1,2,5,1,2,3,4,5,会发生多少缺页?
7
8
9
10
1、访问1,缺页,调入1,内存中为 1, ,;
2、访问2,缺页,调入2,内存中为 1,2,;
3、 访问3,缺页,调入3,内存中为 1,2,3;
4、 访问4,缺页,调入4,淘汰1,内存中为 4,2,3;
5、 访问5,缺页,调入5,淘汰2,内存中为 4,5,3;
6、 访问1,缺页,调入1,淘汰3,内存中为 4,5,1;
7、 访问2,缺页,调入2,淘汰4,内存中为 2,5,1;
8、 访问5,不缺页,内存中为 2,5,1;
9、 访问1,不缺页,内存中为 2,5,1;
10、 访问2,不缺页,内存中为 2,5,1;
11、访问3,缺页,调入3,淘汰5,内存中为 2,3,1;
12、访问4,缺页,调入4,淘汰1,内存中为 2,3,4;
13、访问5,缺页,调入5,淘汰2,内存中为 5,3,4;
。。。太笨了,第一个人说的方法居然没有看懂。
1,2,3,4,5, 1,2,5,1,2,3,4,5,
FIFO(first in first out):先进先出页面置换算法,按照时间顺序替换页面,呆的越久的,很可能以后再用不到了。
自己的理解是这样的:当我们存入队列的数字在内存中已经有的时候就不缺页,没有就缺页
,,1 缺页
,1,2 缺页
1,2,3 缺页
2,3,4 缺页
3,4,5 缺页
4,5,1 缺页
5,1,2 缺页
5,1,2 不缺页
5,1,2 不缺页
5,1,2 不缺页
1,2,3 缺页
2,3,4 缺页
3,4,5 缺页
---------
某页式存储管理系统中,地址寄存器长度为24位,其中页号占14位,则主存的分块大小是()字节。
10
2^10
2^14
2^24
----------下面对多线程和多进程编程描述正确的是?
线程的数据交换更快,因为他们在同一地址空间内
线程因为有自己的独立栈空间且共享数据,不利于资源管理和保护
多进程里,子进程可获得父进程的所有堆和栈的数据;
进程比线程更健壮,但是进程比线程更容易杀掉。
线程和进程的区别联系:
1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
两者都可以提高程序的并发度,提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的:
1、 速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。
2、 资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。
3、 同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内
--------有四个整数,用8位补码分别表示为r1=FEH, r2=F2H, r3=90H, r4=F8H。运算结构存入8位寄存器中,不会溢出的是?
1、 速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。
2、 资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。
3、 同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内
r1*r2
r2*r3
r1*r4
r4*r2
r 1 =(15×16+14)-256=-2;
r 2 =(15×16+2)-256=-14;
r 3 =(9×16+0)-256=-112;
r 4 =(15×16+8)-256=-8;
则r 1 ×r 2 =28,r 2 ×r 3 =1568,r 1 ×r 4 =16,r 2 ×r 4 =112,只有r 2 ×r 3 结果溢出。