tx一面问题及答案(操作系统及计算机网络)

1.进程 线程 协程之间的区别?
进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。进程是线程的容器。进程是程序的实体。

线程:CPU调度的基本单元,有时被称为轻量级进程,是程序执行流的最小单元。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。

  • 1.进程的创建调用fork或者vfork(fork函数会复制父进程的一些资源, 也就是, 仅仅是复制的关系, 而非共享。 而vfork就不同了,
    利用vfork创建的子进程和父进程共享地址空间),而线程的创建调用pthread_create,进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束
    2.线程是轻量级的进程,它的创建和销毁所需要的时间比进程小很多,所有操作系统中的执行功能都是创建线程去完成的
    3.线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源
    4.线程有自己的私有属性TCB,线程id,寄存器、硬件上下文,而进程也有自己的私有属性进程控制块PCB,这些私有属性是不被共享的,用来标示一个进程或一个线程的标志

协程:异步是协程的一种实现方法,协程是异步的一种封装方法,能够保留状态的函数。

多个线程相对独立,有自己的上下文,切换受系统控制;而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。

2.进程之间的通信方式?线程间的通信方式?

进程:
1)管道
管道分为有名管道和无名管道
无名管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系一般指的是父子关系。无明管道一般用于两个不同进程之间的通信。当一个进程创建了一个管道,并调用fork创建自己的一个子进程后,父进程关闭读管道端,子进程关闭写管道端,这样提供了两个进程之间数据流动的一种方式。
有名管道也是一种半双工的通信方式,但是它允许无亲缘关系进程间的通信。

2)信号量
信号量是一个计数器,可以用来控制多个线程对共享资源的访问.,它不是用于交换大批数据,而用于多线程之间的同步.它常作为一种锁机制,防止某进程在访问资源时其它进程也访问该资源.因此,主要作为进程间以及同一个进程内不同线程之间的同步手段.

3)信号
信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生.

4)消息队列
消息队列是消息的链表,存放在内核中并由消息队列标识符标识.消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等特点.消息队列是UNIX下不同进程之间可实现共享资源的一种机制,UNIX允许不同进程将格式化的数据流以消息队列形式发送给任意进程.对消息队列具有操作权限的进程都可以使用msget完成对消息队列的操作控制.通过使用消息类型,进程可以按任何顺序读信息,或为消息安排优先级顺序.

5)共享内存
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问.共享内存是最快的IPC(进程间通信)方式,它是针对其它进程间通信方式运行效率低而专门设计的.它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步与通信.

6)套接字:可用于不同及其间的进程通信

线程:
1、锁机制
1.1 互斥锁:提供了以排它方式阻止数据结构被并发修改的方法。
1.2 读写锁:允许多个线程同时读共享数据,而对写操作互斥。
1.3 条件变量:可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
2、信号量机制:包括无名线程信号量与有名线程信号量
3、信号机制:类似于进程间的信号处理。
线程间通信的主要目的是用于线程同步,所以线程没有象进程通信中用于数据交换的通信机制。

3.DNS协议采用TCP还是UDP传输?

DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议;
DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。

为什么既使用TCP又使用UDP?
首先了解一下TCP与UDP传送字节的长度限制:
UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。

区域传送时使用TCP,主要有一下两点考虑:
1.辅域名服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。
2.TCP是一种可靠的连接,保证了数据的准确性。

域名解析时使用UDP协议:
客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。

4.什么是负载均衡?

负载均衡是指的是把请求均匀的分摊到多个服务器上处理。一般常见的负载均衡有两种:①客户端与反向代理服务器之间的DNS负载均衡②反向代理服务器与应用服务器之间的负载均衡(这种负载均衡有很多,可以是weblogic的负载均衡,可以是Apache+Tomcat负载均衡,也可以是nginx负载均衡,这里只讨论nginx负载均衡)。
负载均衡的关键在于如何使请求均匀的分摊到服务器上。这里考量均匀不仅仅只的是请求数量上的一致,还有服务器压力的平均。如何均匀的分摊,取决于所选的负载均衡策略。
先说DNS负载均衡
dns负载均衡是通过DNS服务器实现的,主要用于把请求均匀的分布到nginx服务器上。其实真是情况中可能是用来根据地域区分请求。但是一个地域中的请求还算需要均匀的分配到nginx服务器上的。
有两个缺点:一个是无法区分服务是否挂掉,即时某个NGINX服务器挂掉了,DNS仍然会分配。另一个是DNS缓存的问题,用户访问网站,网站域名被DNS服务器解析为某个IP。这个IP一般情况都会在客户端本地进行缓存,短时间内下次再访问这个域名,会直接从缓存中拿,无法达到真正的均匀,但这对服务器影响不算太大。重要的请求个数无法真正的做到均衡,比如每个Nginx服务器拿到100个请求,但是所有的耗时大请求都集中到某一台服务器中,那么这个服务器压力将会很大。其他的会比较空闲。
Nginx负载均衡
nginx是目前流行的,优秀的反向代理服务器(其实他不仅仅是反向代理服务器,还是web服务器,也可以是邮件代理服务器,感谢俄罗斯人的智慧)。nginx作为反向代理服务器,主要负责把请求均匀的分摊到应用服务器中。为了达到均匀,Nginx有五种负载均衡策略。
1.轮询
请求依次轮流往每个应用服务器上进行分配,分配策略比较简单。
缺点:不均匀,可能会出现,某些服务器接受的请求较重,负载压力重,有些负荷小,不可控。另外服务器之间需要进行session同步。
2.权重轮询
在轮询的基础上给每个应用服务器一定的权重,比如三台服务器,权重设置为 0.4:0.4:0.2。来到10个请求(序号1到10),那么根据轮询以及权重,序号1、4、 6、 9的请求会打到 第一台服务器上,序号 2、 5 、7 、10 的请求会打到第二台服务器上,剩余序号3 、 8的 请求打到第三台服务器上。
优点:可以根据情况进行调整。可控,仍然需要进行session同步。
3.IP-hash
优点:无需进行session同步,固定IP会固定访问一台服务器。
缺点:恶意攻击,会造成某台服务器压垮。提供的服务不同,面向的地区不同,IP可能会出现集中,造成不均匀,不可控。
4.fair
这种相当于自适应,会根据服务器处理请求的速度进行负载均衡分配。处理请求最早结束的,拿到下一个请求。看上去是不是很好。但是一般都不使用,说是考虑到网络不稳定因素。还有待研究。这种也需要进行session同步。
5.URL-hash
这种是根据URL进行hash,这样某些请求永远打某台服务器。利于利用服务器的缓存,但是可能由于URL的哈希值分布不均匀,以及业务侧重造成某些服务器压力大,某些负荷低。这种也需要进行session同步。
目前比较流行的配置是使用第二种进行配置,但是实际生产中还是需要根据业务特点进行配置,每种策略都具有每种策略的优缺点。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35370263/article/details/79962242
个人分类: 面试
想对作者说点什么? 我来说一句

思科——计算机网络答案

2010年04月03日 5.33MB 下载

没有更多推荐了,返回首页

不良信息举报

tx一面问题及答案(操作系统及计算机网络)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭