面试题2-操作系统和计算机网络

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27232757/article/details/83446164

1.进程和线程的区别?
1)进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位;
2)线程是进程的实体,是CPU调度和分配的基本单位,它是比进程更小的能独立运行的基本单位,不拥有资源,因此其可以提高并发和减少切换的开销;
3)一个进程可以有多个线程,多个线程可以并发执行;
2.线程同步的方式有哪些?(注意一下同步和互斥的区别)
1)互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问;
2)信号量:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。当需要一个计数器来限制可以使用某共享资源的线程数目时,可以使用“信号量”对象;
3)事件:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。即事件机制允许一个线程在处理完一个任务后,主动唤醒另外一个线程执行任;
4)临界区:保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操 作共享资源的目的;
3.进程的状态和转换?
1)运行状态:进程正在处理机上面运行;
2)就绪状态:进程已经处于准备运行状态,就是进程获得了出了CPU之外的所有资源,一旦获取CPU就可以立即运行;
3)阻塞状态:跟是否获取时间片无关,进程因为等待某个事件而暂停运行的状态,例如:等待资源可用或者等待输入和输出的完成;
4.用户态和核心态?
当程序运行在3级特权级之上时,就可以称为运行在用户态,反之为核心态。
用户态和核心态最大的差别就是在于权利的不同,用户态下的引用程序是不能直接访问操作系统内核数据结构和程序的。
5.死锁产生的原因和处理方法?
死锁:死锁是指多个进程在运行的过程中,因为争夺资源而造成的互相阻塞,没有外力的介入无法打破僵局,进程无法继续运行。
死锁产生的原因:1)竞争资源:请求同一个资源的进程数超过了可用资源数;2)进程推进顺序发:进程执行的过程中,资源的请求和释放的顺序不合理。
死锁产生的必要条件:1)互斥条件:进程对分配的资源进行排它性的使用;2)请求和保持条件:进程被阻塞的时候并不释放申请到的资源;3)不可剥夺条件:进程对于已经申请到的资源在使用完成之前不可以被剥夺;4)环路等待条件:发生死锁的时候存在一个进程-资源环形等待链;
死锁的处理:1)预防死锁:破坏产生死锁的四个必要条件中的一个或者多个;实现比较简单,但是限制过多会导致系统资源利用率和吞吐量过低;2)避免死锁:在资源的动态分配中,防止系统进入不安全状态;3)检测死锁:允许系统运行过程中产生死锁,在死锁发生的时候,采用算法检测,并确定与死锁相关的资源和进程,采用相关的算法清除检测到的死锁;4)解除死锁:级死锁的检测相互配合,将系统从死锁中解放出来(撤销进程或者剥夺资源)。
6.进程和程序的区别?
1)进程是动态的,程序是静态的。进程是正在执行的程序,而程序就是一段代码、文件和数据的集合;
2)程序是一直存在的,而进程是暂时的,执行结束就消失了;
3)进程是具有并发性的,而程序没有;
4)一个程序可以有多个进程,但是一个进程只能有一个程序;
7.IP地址的分类?
IP地址分为A,B,C,D,E五种;
1)A类(1.0.0.0-127.255.255.255):地址的第一位必须是0,前8位是网络号,后24位是主机号;私有地址:10.0.0.0~10.255.255.255 ;注意,数字0和 127不作为A类地址,数字127保留给内部回送函数,而数字0则表示该地址是本地宿主机,不能传送。;
2)B类(128.0.0.0-191.255.255.255):地址的前两位必须是10,前16位是网络号,后16位是主机号;私有地址:172.16.0.0~172.31.255.255;
3)C类(192.0.0.0-223.255.255.255):地址的前三位必须是110,前24位是网络号,后8位是主机号;私有地址:192.168.0.0~192.168.255.255;
4)D类(224.0.0.0-239.255.255.255):地址的前四位必须是1110,广播地址;
5)E类:地址的前五位必须是11110,保留地址;
8.子网数、子网掩码和主机数的关系?
IP地址:网络+子网+主机
替换默认子网掩码转换为二进制中主机地址部分的前几位(子网数目转换成二进制的位数);
注意:求最大可用主机数要减2(除去全是0的网络地址和全是1广播地址)
9.操作系统中的进程调度算法?
1)先进先出进程调度算法(FIFO):按照进程就绪的先后顺序来调度进程;
2)短作业(进程)优先调度算法(SJF/SPF):选择就绪队列中估计运行时间最短的进程投入运行;
3)时间片轮转调度算法:把CPU划分成若干时间片,并且按顺序赋给就绪队列中的每一个进程,进程轮流占有CPU,当时间片用完时,即使进程未执行完毕,系统也剥夺该进程的CPU,将该进程排在就绪队列末尾。同时系统选择另一个进程运行。
4)优先权调度算法:优先选择就绪队列中优先权最高的进程投入运行。 非抢占式优先权算法: 仅在事件发生放弃处理机时 ;抢占式优先权算法: 可将正在运行的运行权剥夺;
5)高响应比优先调度算法:高响应比优先调度算法的基本思想是把CPU分配给就绪队列中响应比最高的进程。短作业优先调度算法 + 动态优先权机制 既考虑作业的执行时间也考虑作业的等待时间,综合了先来先服务和最短作业优先两种算法的特点。计算公式:响应比 =(等待时间+要求服务时间)/ 要求服务时间,即RR=(w+s)/s=1+w/s,因此响应比一定是大于1的。
6)多级反馈队列调度算法:设置多个就绪队列,每个队列的优先级各不相同,第一个队列的优先级最高,其余队列的优先级逐个降低,各个队列中执行的时间片也是各不相同,优先级越高,执行的时间片越小;

10.TCP如何实现可靠性传输?
1)序列号、确认应答、去重:序列号就是传输的时候TCP协议把每个字节的数据都进行了编号,这个编号就是序列号。确认应答是指接收方接收到数据之后向传输方发送ACK报文(确认应答),ACK报文中带有确认序列号,确认序列号可以告诉发送方,接收到了哪些数据,下一次从哪里发送数据。接收方可以根据序列号对接收到数据的序列号进行排序,取出重复的序列号的数据;
2)超时重传:超时重传中的超时指的是发送方发送一部分数据之后,迟迟等不到接收方发送的ACK报文,超过了限定的时间。发送方迟迟接受不到ACK报文的原因可能有两点,第一个是数据在传输的过程中由于网络的原因等全体丢包,接收方根本没有接收到包;第二个是接收方接收到了响应的数据,但是发送的ACK报文响应由于网络的原因丢包了。根据此问题TCP引入了超时重传机制,实现的机制就是在发送方发送完数据后等待一个时间,时间内没有接收到ACK报文,就重新发送该数据。如果是由于第一个原因引起的超时,那么接收方收到重发的数据之后,便进行ACK应答。如果是由于第二个原因导致的超时,接收方根据序列号发现数据已经接受过了,那么直接丢弃,仍旧发送ACK应答。
注意:等待时间(超时时间)是发送方发送完数据之后等待ACK报文的时间,这个时间过长会影响效率,过短会导致频繁发送重复的包,所以TCP为了保证高性能的通信,动态计算该时间。超时是一500ms为一个单位进行控制的,每次超时重发的超时时间都是500ms的整数倍,重发一次后仍旧超时,等待2*500,下一次再超时4*500,超时时间成指数增长,达到一定的重传次数就会强制关闭连接;
3)连接管理:
(1)、三次握手(已失效的连接请求报文段):第一次握手的时候客户端发送syn=1,seq=x的数据包发送到服务器,客户端进入SYN_SENT的状态,等待服务器的确认;主机由于SYN=1知道,A要求建立连接;第二次握手是服务端收到请求建立连接的消息之后,向客户端发送SYN=1,ACK=1,seq=y,ack=x+1,服务器进入SYN_RECV状态;第三次握手是客户端收到服务端发送来的确认消息之后,如果同意建立连接,向服务端发送ACK=1,seq=x+1,ack=y+1,这是客户端已经进入ESTABLISHED状态,服务端收到确认信息之后,也进入ESTABLISHED状态;
(2)、四次挥手:数据传输结束之后,通信双方都可以释放连接。客户端和服务端都处于ESTABLISHED状态。假设客户端先向服务端发送释放连接的报文段,并停止再发送数据,主动关闭连接。客户端会发送FIN=1,seq=u,客户端进入FIN_WAIT-1(终止等待1)状态,服务端收到释放连接的报文之后,会给客户端返回ACK=1,seq=v,ack=u+1,这时服务端进入CLOSE-WAIT(关闭等待)状态。TCP连接处于半关闭状态,客户端不可以向服务端发送数据了,但是服务端可以向客户端发送数据。客户端收到服务端的确认消息之后,就进入FIN-WAIT-2(终止等待2)状态,等待服务端发送连接释放报文;服务端如果没有要发送的数据,会向客户端发送连接释放报文,FIN=1、ACK=1、seq=w、ack=u+1,然后进入TIME-WAIT(时间等待)状态,这是TCP连接没有释放掉,等待2MSL(最长报文段寿命)之后才会进入到CLOSED状态,服务端收到客户端发送的报文ACK=1,seq=u+1,ack=w+1,就进入到CLOSED状态。
4)流量控制:流量控制是指TCP协议根据接收端对数据的处理能力,决定发送端的发送速度,这个机制就是流量控制。解决办法就是滑动窗口。
5)拥塞控制:TCP传输的过程中,发送端开始发送数据的时候,如果刚开始发送就发送大量的数据,那么可能造成网络在开始的时候就很拥堵,如果网络中扔出了大量的数据,那么这个拥堵就会加剧,产生丢包,超时重传,严重影响了传输。
拥塞控制的四个算法:1)慢启动;2)拥塞避免;3)拥塞发生;4)快速恢复

面试题1-Java基础:https://blog.csdn.net/qq_27232757/article/details/83032601
面试题3-Spring和Mybatis:https://blog.csdn.net/qq_27232757/article/details/83446183
面试题4-算法:https://blog.csdn.net/qq_27232757/article/details/83474056

 

猜你喜欢

转载自blog.csdn.net/qq_27232757/article/details/83446164