Table of Contents
软件工程
软件工程
-
什么是软件工程
-
研究软件和研究软件工程有没有什么区别
软件测试
-
用英文解释一下什么事软件测试,必须英文
计算机基础
操作系统
死锁
多个进程因循环等待资源而造成无法执行的现象,造成系统资源的极大浪费,无法释放
-
死锁原因(AB互相索取资源)
-
死锁条件(四项)
-
互斥使用:进程对资源进行排他性使用,一段时间内某资源只由一个进程占用。如果还有其他进程请求资源,则请求者只能等待,直到占用资源的进程用毕释放
-
不可抢占
-
请求和保持:该进程已经保持了至少一个资源,但是提出新的请求,而请求资源已经被占用,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
-
循环等待:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
-
-
处理器管理。包括进程控制、进程互斥等。
-
存储管理。包括分区存储、页式存储等。
-
文件管理。包括文件目录、文件系统的实现等。
-
操作系统线程跟进程的区别等(操作系统的问题比较爱问)
-
多任务
-
多道程序:CPU资源比较珍贵,为了让CPU得到更好的利用,把暂时无需使用的CPU用于其他正在等待CPU资源的程序,称为多道程序。缺点是不分轻重缓急
-
分是系统:改进躲到程序,使得每个程序运行一段时间就主动让出CPU资源
-
多任务系统:操作系统从最底层接管了所有的硬件资源,所有应用程序在操作系统之上以进程的方式运行,每个进程拥有自己独立的地址空间,相互隔离。CPU统一由操作系统进行分配
-
进程
-
进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。
-
第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。
-
文本区域存储处理器执行的代码;
-
数据区域存储变量和进程执行期间使用的动态分配的内存;
-
堆栈区域存储着活动过程调用的指令和本地变量。
-
-
第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。
-
基本状态:
-
等待态:等待某个事件的完成;
-
就绪态:等待系统分配处理器以便运行;
-
运行态:占有处理器正在运行。
-
-
状态转换:
-
运行态→等待态 往往是由于等待外设,等待主存等资源分配或等待人工干预而引起的。
-
等待态→就绪态 则是等待的条件已满足,只需分配到处理器后就能运行。
-
运行态→就绪态 不是由于自身原因,而是由外界原因使运行状态的进程让出处理器,这时候就变成就绪态。例如时间片用完,或有更高优先级的进程来抢占处理器等。
-
就绪态→运行态 系统按某种策略选中就绪队列中的一个进程占用处理器,此时就变成了运行态
-
-
进程调度
-
调度种类:高级、中级和低级调度作业从提交开始直到完成,往往要经历下述三级调度:
-
高级调度:(High-Level Scheduling)又称为作业调度,它决定把后备作业调入内存运行;
-
中级调度:(Intermediate-Level Scheduling)又称为在虚拟存储器中引入,在内、外存对换区进行进程对换。
-
低级调度:(Low-Level Scheduling)又称为进程调度,它决定把就绪队列的某进程获得CPU;
-
-
调度算法:
-
FIFO或First Come, First Served (FCFS),调度的顺序就是任务到达就绪队列的顺序。
-
Shortest Job First (SJF),最短的作业(CPU区间长度最小)最先调度。SJF可以保证最小的平均等待时间。
-
优先权调度,每个任务关联一个优先权,调度优先权最高的任务。注意:优先权太低的任务一直就绪,得不到运行,出现“饥饿”现象。
-
Round-Robin(RR),设置一个时间片,按时间片来轮转调度(“轮叫”算法),优点: 定时有响应,等待时间较短;缺点: 上下文切换次数较多;
-
多级队列调度:
-
按照一定的规则建立多个进程队列
-
不同的队列有固定的优先级(高优先级有抢占权)
-
不同的队列可以给不同的时间片和采用不同的调度方法
-
-
多级反馈队列:在多级队列的基础上,任务可以在队列之间移动,更细致的区分任务。 可以根据“享用”CPU时间多少来移动队列,阻止“饥饿”。
-
-
-
本地进程通信:
-
消息传递(管道、FIFO、消息队列)
-
同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)
-
共享内存(匿名的和具名的)
-
远程过程调用(Solaris门和Sun RPC)
-
线程
-
多进程解决了前面提到的多任务问题。然而很多时候不同的程序需要共享同样的资源(文件,信号量等),如果全都使用进程的话会导致切换的成本很高,造成 CPU 资源的浪费。于是就出现了线程的概念。
-
线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。
-
轻型实体 线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源。线程的实体包括程序、数据和TCB。线程是动态概念,它的动态特性由线程控制块TCB(Thread Control Block)描述。
-
在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小(在同一进程中的)。
-
可并发执行。 在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行,充分利用和发挥了处理机与外围设备并行工作的能力。
-
共享进程资源。在同一进程中的各个线程,都可以共享该进程所拥有的资源
-
所有线程都具有相同的地址空间(进程的地址空间),这意味着,线程可以访问该地址空间的每一个虚地址;
-
问进程所拥有的已打开文件、定时器、信号量等。线程之间互相通信不必调用内核。
-
线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。
-
-
-
本地进程间通信的方式:
-
消息传递(管道、FIFO、消息队列)
-
同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)
-
共享内存(匿名的和具名的)
-
远程过程调用(Solaris门和Sun RPC)
-
进程和线程的区别
a.地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
b.通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
c.调度和切换:线程上下文切换比进程上下文切换要快得多。
d.在多线程OS中,进程不是一个可执行的实