1、引入线程可提高程序并发执行的程度,可进一步提高系统效率
- 线程是比进程更小的能独立运行的基本单位 ( 独立错了,离开了进程,线程分配不到资源没法运行)
- 线程的引入增加了程序执行时时空开销 (错,减小了时空开销而不是增加)
- 一个进程一定包含多个线程 (错,一个进程至少包含一个主线程)
2、操作系统是方便用户管理和控制计算机软硬件资源的系统程序集合。
- 从用户的角度:操作系统管理计算机系统的各种资源,控制硬件的功能和软件程序的执行。
- 从人机交互角度:操作系统是用户与机器的接口,提供良好的人机界面,方便用户通过具体化的自然界面操作抽象化的机器指令。
- 从系统结构角度:操作系统是一个大型软件系统,采用层次式、模块化的程序结构。
3、时钟管理用来产生和管理系统时钟,地址映射用来将程序中的逻辑地址转换成内存中的物理地址,中断系统是用于CPU向操作系统进行通信的于段,它们都需要相应的硬件支持,分别是时钟电路、地址转换机构和中断机构。而进程调度则是完全由软件实现,不需要硬件的直接支持。
4、进程状态图
5、线程状态图
6、在页式存储管理中,块内位移量等于页内位移量是因为页的大小等于块的大小。页不过是进程里的称呼,块是存储器里的称呼,本质都是一样的。用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配。
7、Linux进程中,应用的运行起始地址都相同,是因为linux的虚拟内存模型,使得每个进程都以为自己拥有整个内存空间(内核使用的空间除外)。
8、同一变量i,两个线程执行i++100次,多核cpu,最小值2,最大值200,单核cpu,最小值100,最大值200。
- i++只需要执行一条指令,并不能保证多个线程i++,操作同一个i,可以得到正确的结果。因为还有寄存器的因素,多个cpu对应多个寄存器。每次要先把i从内存复制到寄存器,然后++,然后再把i复制到内存中,这需要至少3步。从这个意义上讲,说i++是原子的并不对。
- 如此,假设两个线程的执行步骤如下:
- 线程A执行第一次i++,取出内存中的i,值为0,存放到寄存器后执行加1,此时CPU1的寄存器中值为1,内存中为0;
- 线程B执行第一次i++,取出内存中的i,值为0,存放到寄存器后执行加1,此时CPU2的寄存器中值为1,内存中为0;
- 线程A继续执行完成第99次i++,并把值放回内存,此时CPU1中寄存器的值为99,内存中为99;
- 线程B继续执行第一次i++,将其值放回内存,此时CPU2中的寄存器值为1,内存中为1;
- 线程A执行第100次i++,将内存中的值取回CPU1的寄存器,并执行加1,此时CPU1的寄存器中的值为2,内存中为1;
- 线程B执行完所有操作,并将其放回内存,此时CPU2的寄存器值为100,内存中为100;
- 线程A执行100次操作的最后一部分,将CPU1中的寄存器值放回内存,内存中值为2;
- 所以该题目便可以得出最终结果,最小值为2,最大值为200。
9、管态:管态又叫特权态,系统态,是操作系统管理的程序执行时,机器所处的状态。
原语:通常由若干条指令组成,用来实现某个特定的操作。通过一段不可分割的或不可中断的程序实现其功能。是操作系统的一个组成部分,它必须在系统态下执行,并且常驻内存,而个别系统有一部分不在管态下运行。
原语和广义指令都可以被进程所调用,两者的差别在于原语有不可中断性,它是通过在执行过程中关闭中断实现的,且一般由系统进程调用。
许多广义指令的功能都可用目态(一种机器状态,通常把它作为用户程序执行时的状态)下运行的系统进程完成,而不一定要在管态下完成,例如文件的建立、打开、关闭、删除等广义指令,都是借助中断进入管态程序,然后转交给相应的进程,最终由进程实现其功能。因此题中描述是错误的,
10、静态随机存取存储器(Static Random-Access Memory,SRAM)是随机存取存储器的一种。是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。动态随机存取存储器(Dynamic Random Access Memory,DRAM)最为常见的系统内存。DRAM的存储位元是基于电容器的电荷量存储,这个电荷量会随着时间和温度而减少,因此必须定期的刷新,以保持它们原来记忆的正确信息。对DRAM的所有存储单元恢复一次原状态的时间间隔,叫做刷新周期。只读存储器(Read-Only Memory,ROM)所存数据稳定 ,断电后所存数据也不会改变;其结构较简单,读出较方便,因而常用于存储各种固定程序和数据。