一进程刚获得三个主存块的使用权,若该进程访问页面的次序是{1321215123},采用LRU算法时,缺页数是 5 次。
1第一次(缺1)
3 1第二次(缺3)
2 3 1第三次(缺2)
1 2 3(刚使用的放在前面未使用的依次后移)
2 1 3
1 2 3
5 1 2第四次(3是最少使用的所以换出)
1 5 2
2 1 5
3 2 1第五次(5是最少使用的所以换出)
可重入函数可认为是可以被中断的函数,自动变量定义的时候才被创建,函数返回时,系统回收空间,他是的是局部作用域变量,不需要互斥量。可重入函数对全局变量才需要互斥量保护。
满足下列条件的函数多数是不可重入的:
(1)函数体内使用了静态的数据结构;
(2)函数体内调用了malloc()或者free()函数;
(3)函数体内调用了标准I/O函数。
若系统中存在多个进程,它们中的每一个进程都占用了某种资源而又都在等待其中另一个进程所占用的资源,那么这种等待永远都不能结束,就称为系统出现了“死锁”。
生成死锁的4个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系
进程自己进入死循环只能产生饥饿,饥饿可能由一个进程导致,而死锁一定要有2个或2个以上的进程才会导致;
设备分配方式分为 独立分配方式, 共享方式 ,虚拟方式,共享设备适合于独立分配方式和共享分配方式,独立分配方式容易引发死锁,共享设备允许多个进程申请使用,不会造成死锁
a) Little-Endian就是低位字节排放在内存的低地址端, 高位字节排放在内存的高地址端。
b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
c) 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。 整数0x12345678
如果是 Little-Endian:0x0-0x3内存分别存放的是:0x78、0x56、0x34、0x12;
如果是 Big-Endian :0x0-0x3内存分别存放的是:0x12、0x34、0x56、0x78;
使用C语言将一个1G字节的字符数组从头到尾全部设置为字’A’,在一台典型的当代PC上,需要花费的
CPU时间的数量级最接近(1s)
当代典型PC机运算速度可达10亿次/秒(10^9),即执行一条典型指令 1/1,000,000,000秒=1纳秒
1GB = 2^30 B = 8^10 B(8^10大小为10亿多一点)
对于普通的计算机, 对以下事件的平均耗时从小到大排序为
读取一次L2缓存 读取1KB内存数据 一次磁盘寻道 从硬盘连续读取
缓存 内存 磁盘寻道 硬盘
在分页存储管理系统中,页面的大小是由计算机系统的地址结构所决定的,一般由软硬件共同决定。
分页式虚拟存储管理系统中,页面的大小与可能产生的缺页中断次数( 无关)
Linux中的init进程就没有父进程,因为它就不是通过fork的方式产生的
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
线程是系统调度的基本单位,进程是资源分配的基本单位
线程只能提高同进程之间的通信效率,程序间的通信效率显然还是要进程切换的
进程调度时,下列进程状态的变化过程哪一项是不可能发生的? 就绪挂起->阻塞挂起
在系统内存中设置磁盘缓冲区的主要目的是(减少磁盘 I/O 次数 )。
磁盘和内存的速度差异,决定了可以将内存经常访问的文件调入磁盘缓冲区,从高速缓存中复制的访问比磁盘 I/O 的机械操作要快很多很多。
进程从执行态变为就绪态的事件是 :被高优先级进程抢占 。 被剥夺了处理机资源,进入就绪态,一旦得到处理机即可运行。
请求某一资源会进入阻塞态:执行 P(wait)操作 申请内存失败 启动 I/O 设备
管道实际上是一种固定大小的缓冲区,管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在于内存中。
管道是由内核管理的一个缓冲区,其容量受多方面因素影响,包括缓冲区的大小、磁盘容量大小等问题
它类似于通信中半双工信道的进程通信机制一个管道可以实现双向 的数据传输,而同一个时刻只能最多有一个方向的传输,不能两个方向同时进行。管道的容 量大小通常为内存上的一页,它的大小并不是受磁盘容量大小的限制。当管道满时,进程在写管道会被阻塞,而当管道空时,进程读管道会被阻塞
一个文件被用户进程首次打开即被执行了Open操作,会把文件的FCB调入内存,而不会把文件内容读到内存中,只有进程希望获取文件内容的时候才会读入文件内容
快表存放在高速缓存中,增大快表相当于增大了高速缓存。会增速
页表从硬盘搬到内存中,内存的访问速度高于硬盘。也会增速
增大TLB,是为了避免去内存中匹配页表。TLB本身就在cache里,而且能并行计算。把页表都放在内存里,也是可以的,但一般页表很大,可以经过多级页表和反置页表处理后再放在内存里。交换区是内存不够用时的解决手段,增大交换区能腾出更多地方。
一个进程的读磁区操作完成后,操作系统针对该进程必做的是 ( 修改进程状态为就绪态 )
进程申请读磁盘操作的时候,因为要等待工/ 〇完成,将自身阻塞,进入阻塞态。当 I/ 〇完成之后,从阻塞进入就绪态
计算进程会占用大量的cpu时间,而i/o大的会占用较少的cpu资源,相当于短作业,所以应该优先权更高
Linux 中采用把文件名与文件描述信息分开的方法,使文件描述信息单独形成一个定长的数据结构,称为索引节点。也就是说一个文件对应一个索引节点。 作用类似于Windows下的文件分配表。索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。
因为地址项的个数等于直接地址索引+间接地址索引。而单个文件的大小和间接地址索引的个数和文件块的大小都有关系。
当所读文件的数据不在内存时,产生中断(缺页中断),原进程进入阻塞状态,直到所需数据从外存调入内存后,才将该进程唤醒
请求 read 系统调用 通过陷入将CPU从用户态切换到核心态,从而获取操作系统提供的服务
要读一个文件首先要用open系统调用打开该文件。open中的参数包含文件的路径名与文件名,而read只需要使用open返回的文件描述符,并不使用文件名作为参数。read要求用户提供三个输入参数:①文件描述符fd;②buf缓冲区首址;③传送的字节数n。read的功能是试图从fd所指示的文件中读入n个字节的数据,并将它们送至由指针buf所指示的缓冲区中。
虚拟内存本来就是为了把所有的能用的存储空间都统一起来。所以,基于非连续分配技术看起来很适合。
而虚拟内存的容量是受到内外存容量和计算机地址位数限制的。
缺页:又名硬中断,是当软件试图访问已映射在虚拟地址空间中,但是目前并未被加载在物理内存中的一个分页时,由中央处理器的内存管理单元所发出的中断。
缺页处理中操作系统可能的操作: Ⅰ.修改页表 Ⅱ.磁盘 I/O Ⅲ.分配页框
缺页中断产生后,需要在内存中找到空闲页框并分配给需要访问的页(可能涉及到页面置换),之后缺页中断处理程序调用设备驱动程序做磁盘I/O,将位于外存上的页面调入内存,调入后需要修改页表,将页表中代表该页是否在内存的标志位(或有效位)置为1,并将物理页框号填入相应位置,若必要还需修改其他相关表项等。
1.系统调用可能在用户态和内核态发生,系统调用把应用程序的请求(用户态的请求)传入内核,由内核(内核态)处理请求并将结果返回给应用程序(用户态) 用户态->核心态
2.中断的发生与CPU当前的状态无关,既可以发生在用户态,又可以发生在内核态,因为无论系统处于何种状态都需要处理外部设备发来的中断请求。
3.进程切换在核心态下完成,不能发生在用户态。原因:需要调度处理器和系统资源,为保证系统安全?
4.缺页(异常)也是用户态->内核态
ABD(系统调用中断异常)都是用户态转向内核态,而进程切换只能发生在内核态
所以选C进程切换
在虚拟内存管理中,地址变换机构将逻辑地址变为物理地址,形成该逻辑地址的阶段是 链接
进程时间片用完,可降低其优先级以让别的进程被调度进入执行状态。B选项中进程刚完成I/O,进入就绪队列等待被处理机调度,为了让其尽快处理I/O结果,故应提高优先权。C选项中进程长期处于就绪队列,为不至于产生饥饿现象,也应适当提高优先级。D选项中进程的优先级不应该在此时降低,而应在时间片用完后再降低。
在使用锁保证现场安全时可能会出现 活跃度 失败的情况主要包括 饥饿、丢失信号、和活锁、死锁 等。
饿 :指线程需要访问的资源 被永久拒绝 ,以至于不能再继续进行。解决饥饿问题需要平衡线程对资源的竞争,如线程的优先级、任务的权重、执行的周期等。
活锁 :指线程虽然没有被阻塞,但由于某种条件不满足,一直尝试重试却始终失败。解决活锁问题需要对 重试机制 引入一些随机性。例如如果检测到冲突,那么就暂停随机的一定时间进行重试,这会大大减少碰撞的可能性。
进程在运行期间通过创建进程系统调用来创建多个新进程。每一个进程都有生命期,即从创建到消亡的时间周期。当操作系统为一个程序构造一个进程控制块并分配地址空间之后,就创建了一个进程。
用户登录 在终端上一个交互式作业登录。
作业调度 提交一个批处理作业。
提供服务 操作系统创建一个服务进程。
应用请求 存在的进程创建新的进程。
父进程和子进程都有自己独立的地址空间;
父进程结束,所有子进程都结束,进程结束,所有线程都结束;
主线程和子线程是并行关系的时候,并没有依赖关系。父进程和子进程中,子进程是父进程的一个副本,创建子进程后,子进程会有自己的空间,然后把父进程的数据拷贝到子进程的空间里。运行时,谁先运行是不确定的,这由系统决定
如果多个进程同时占有对方需要的资源而同时请求对方的资源,而它们在得到请求之前不会释放所占有的资源,那么就会导致死锁的发生,也就是进程不能实现同步。
多线程和多进程都会引起死锁,一般说的死锁指的是进程间的死锁。。
fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 、fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;
请问下面的程序一共输出多少个“-”? //一共调用了6次printf,但是会输出8个-。因为父进程的输出缓冲也会被子进程复制 int main(void) { int i; for (i = 0; i < 2; i++) { fork(); printf("-"); } return 0; }
系统中内存不足程序所需大小,程序就无法执行。 ×
操作系统存在虚拟内存,能够把一部分优先级较低的程序保存到系统硬盘
防止程序间相互越界访问
存 储 保护,是指给外置的存储设备加个保护程序,写不进去数据,也删不掉数据。当多个用户共享主存时,为使系统能正常工作,应防止由于一个用户程序出错而破坏其它用户的程序和系统软件,还要防止一个用户程序不合法的访问不是分给它的主存区域。为此,系统提供存储保护。 通常采用的方法是:存储区域保护和访问方式保护。
**1.强占式:**现行进程在运行过程中,如果有重要或紧迫的进程到达(其状态必须为就绪),则现运行进程将被迫放弃处理机 ,系统将处理机立刻分配给新到达的进程。
2. 静态优先权 :在创建进程时确定的,优先权在进程的整个运行期间保持不变。
3. 动态优先权 :在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能,该优先权会随着等待的时间增长而增长。
信号量为-m,就是有m个进程在等待,一共m+1个进程,还有一个已经进入临界区
互斥信号量不采用自旋锁的方式实现,mutex初始值为1,当一个准备进入临界区时,mutex - 1 = 0,该进程进入临界区;
另一个进程准备进入临界区时,mutex - 1 = -1,mutex < 0时将该进程挂起到mutex的列表中,等待被唤醒。
因此一个进程已经进入临界区,另一个进程在等待。
如果系统只有用户态线程,则线程对操作系统是不可见的,操作系统只能调度进程;
如果系统中有内核态线程,则操作系统可以按线程进行调度;
以下场景中不适合使用cache的是 数据库中每条数据被访问的概率近似相等,且独立
分段机制就是把虚拟地址空间中的虚拟内存组织成一些长度可变的称为段的内存块单元
分页机制把线性地址空间和物理地址空间分别划分为大小相同的块。这样的块称之为页。通过在线性地址空间的页与物理地址空间的页之间建立的映射,分页机制实现线性地址到物理地址的转换
线性访问内存非法时,当前线程会进入信号处理函数
ulimit用于shell启动进程所占用的资源.-c size:设置core文件的最大值.单位:blocks
malloc 当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存
进程调度中"可抢占"和"非抢占"两种方式,后者引起系统的开销更大
每个进程都有自己的文件描述符表,所有进程共享同一打开文件表和v-node表
基本的存储技术包括RAM,ROM,磁盘以及SSD,其中访问速度最慢的是磁盘,CPU的高速缓存一般
是由RAM组成的
每按键一次,或鼠标点击一次,都产生一个中断,称为按键中断,执行中断响应程序,操作系统将按键消息加入消息队列
内核对象就是在系统中占据一块空间的结构体,能够被多个进程访问。临界区是资源对象,在同步中用到,只能被一个进程访问。
内核对象有:存取符号对象、事件对象、文件对象、文件映射对象、I / O完成端口对象、作业对象、信箱对象、互斥对象、管道对象、进程对象、信标对象、线程对象和等待计时器对象等。这些对象都是通过调用函数来创建的。
每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。
界区与互斥量的区别是:
1、临界区只能用于对象在同一进程里线程间的互斥访问;互斥体可以用于对象进程间或线程间的互斥访问。 2、临界区是非内核对象,只在用户态进行锁操作,速度快;互斥体是内核对象,在核心态进行锁操作,速度慢。
3、临界区和互斥体在Windows平台都下可用;Linux下只有互斥体可用。
在Linux中 umask:目前用户在新建文件或者目录时候的默认权限值
在Linux中r,w,x****的值分别是 : 4 2 1
文件的默认值是666
目录的默认值是777
新建一个文件所以是666-244=422
错误:unresolved external symbol BeginScene属于( 链接 )阶段错误。
无法解析的外部符号,说明单个文件已经编译通过,在链接时,查找外部符号没有找到,无法解析,所以是发生在链接阶段。
A 设置Cache的目的,是解决CPU和主存之间的速度匹配问题
B 设置Cache的理论基础,是程序访问的局部性原理
D Cache的功能均由硬件实现,对程序员是透明的
页面的频繁更换,导致整个系统效率急剧下降,这个现象称为内存抖动。
抖动一般是内存分配算法不好,内存太小引或者程序的算法不佳引起的页面频繁从内存调入调出。
inode是保存文件元信息的区域
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。
这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)
文件操作的唯一依据是 文件句柄
在二进制中,负数符号位为1,那么三进制中,负数的符号位就为2。所以-10的三进制原码为2101,然后符号位不变,其他位按三进制取反,那0,1,2按三进制取反为多少呢?3进制数,每位最大只能为2,那么必须保证a+a的反=2,所以0取反为2,1取反为1,2取反为0。所以2101的反码为2121,然后再加1,即为2122就是-10的4位三进制补码。
把传输的比特流划分为帧 数据链路层
200:请求成功,浏览器会把响应体的内容(通常是html显示在浏览器中
404:请求的资源没找到,说明客户端错误的请求了不存在的资源。
500:请求的资源找到了,但是 服务器 内部出现了错误
301: 永久重定向
302: 临时重定向 ,表示服务器要求浏览器重新发送一个请求,服务器会发送一个响应头Location,它指定了请求的URL地址
304:服务器端会获取If-Modified-Since值,与index.html的当前最后修改时间比对,如果相同,服务器会发响应码304,表示index.html与浏览器上次缓存的相同,无需再次发送,浏览器可以显示自己的缓存页面 读取浏览器缓存
- 1xx:表示通知信息,如请求收到了或正在进行处理
- 2xx:表示成功,如接收或知道了
- 3xx:表示重定向,如要完成请求还必须采取进一步行动
- 4xx:表示客户的差错,如请求中有错误的语法或不能完成
- 5xx:表示服务器的差错,如服务器失效无法完成请求
合法的HTTP请求方法有: GET、POST和HEAD 。其中,GET方法用于获取由Request-URI所标识的资源的信息;POST方法用于想服务器发送请求,这点和GET方法没有区别。 但是POST方法要求服务器接收附在请求后面的数据。 HEAD方法与GET方法几乎是一样的, 它们的区别在于HEAD方法只是请求消息报头,而不是完整的内容。
NAT是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。
B NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad。
C NAT可以有效的缓解了IP地址不足的问题
SQL 语句中修改表结构的命令是(ALTER TABLE )
在sql数据库中,哪个语句能校验整数列 i 的值不小于 1 不大于 10 ? A i BETWEEN 1 AND 10
关系数据库所采用的数据存放形式是(二维表)
在一个mysql查询中,使用哪一个关键字能去除重复列值(distinct )
下列哪一个命令为删除 sample 数据库的 tb_ame 表(drop table sample.tb_ame )
计算每位学生的多学科加总成绩的SQL是 select sum(score) as total,stud_name from [成绩表](nolock) group by stud_name
如果事务T获得了数据项Q上的排它锁,则T对Q 既可读又可写
从表TABLE_NAME中提取前10条记录? select TOP 10 * from TABLE_NAME
查找 student表中所有电话号码(列名:telephone)的第一位为8或6,第三位为0的电话号码
SELECT telephone FROM student WHERE telephone LIKE ‘[8,6]_0%’ A
数据库事务的 4 个特性是:原子性、一致性、(持久性)、隔离性。