计算机网络和操作系统常见问题私人memo

本文仅仅是私人memo,由于时间原因存在一些排版问题,本人将抽空重排版并对大概进行扩展。

中断和轮询的特点:

    都是对IO设备程序轮询的方式,是早期计算机系统对IO设备的一种管理方式。定时对各种设备轮询问一遍有无处理请求。轮询之后,有要求的就处理,处理完后处理机继续工作。
    轮询需要时间,但是轮询比IO设备速度快很多,但是比IO速度快很多。但是轮询依然是效率很低的一种方式。
    程序中断简称中断,指CPU在正常运行程序的过程中,由于预先安排或者发生了各种随机内部或者外部事件,使得CPU中断正在运行的程序,而转到为响应服务程序去处理。
    轮询--效率低 等待时间长 CPU利用率低
    中断--容易遗漏一些问题 CPU利用率高

临界区
    每个进程访问临界资源的那段程序成为临界区,每次只允许一个进程进入临界区。
  (1)如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入;
  (2)任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待;
  (3)进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区;
  (4)如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

分段、分页
    页是信息的物理单位,分也是为实现离散分配方式,以效减内存的外零头,提高内存利用率。或者说,分页仅仅是由于系统管理的需要,不是用户的需要。
    段是信息的逻辑单位,它含有一组意义相对完整的信息。目的是为了能更好满足用户的需要。
    页的大小固定而且由系统确定,把逻辑地址分为页号和业内地址两部分,由及其硬件实现,因而一个系统只能有一个大小的页面。
    段的长度不固定,取决于用户编写的程序,通常由编辑程序对源程序进行编辑时,根据信息的性质来划分。
    分页的作业地址空间是一维的,即单一的线性空间,程序员只需要利用一个记忆符就可以表示一个地址。
    分段的作业地址空间是二位的,程序员在标识一个地址时,需要给出段名的同事给出段内地址。

段页式存储
    分段式和分页式结合的存储组织方法,充分利用和结合分段和分页管理的优点
    1、分段方法来分配和管理虚拟存储器。
    2、分页方法来分配和管理实际存储块。
    3、使用逻辑地址结构
    4、段表、页表、段表地址寄存器。每个作业建立一个段表,并且该段表中每个段建立一个页表。系统中有一个段表地址寄存器来指出作业的段表起始地址和段表长度。
段页式存储管理的优缺点
 优点
   (1) 它提供了大量的虚拟存储空间。
   (2) 能有效地利用主存,为组织多道程序运行提供了方便。
缺点:
   (1) 增加了硬件成本、系统的复杂性和管理上的开消。
   (2) 存在着系统发生抖动的危险。
   (3) 存在着内碎片。
   (4) 还有各种表格要占用主存空间。
 段页式存储管理技术对当前的大、中型计算机系统来说,算是最通用、最灵活的一种方案。

页面置换算法
    进程进行时,若访问的页面不在内存而需要调入,但是内存无空闲空间时,需要从内存中调出一夜程序或者数据,进入磁盘兑换区。
    选择调出页面的算法就是页面置换算法。好的置换算法应该由较低的页面更换频率。
    1、最佳置换算法(OPT)
    淘汰以后最长时间不再被访问的页面,以确保最低的缺页率。由于人们无法预知将要需要哪些页面,因此无法实现,但是这是衡量其他算法的算法。
    2、先进先出算法(FIFO)
    淘汰最先进入内存的页面,也就是停留内存最久的页面。
    3、最近最久未使用算法(LRU)
    淘汰最长时间未访问过的页面。

进程调度算法
    1、(先来先服务)FCFS 非抢占式的先来先服务算法
    优点:简单 只需要一个队列 而且公平
    缺点:有利于长进程 不利于短进程 有利于CPU繁忙的进程 不利于IO繁忙的进程
    2、(最短作业优先)SJF 目标是减少平均周转时间
    对预计指向时间短的进程优先分派处理机。
    优点:相比FCFS算法,该算法可改善平均周转时间和平均带权周转时间,缩短进程等待时间,提高吞吐量。
    缺点:对长进程不利,可能长时间得不到执行,且不能更具优先级来决定进程的调度。
    3、最高响应比优先法(HRNN) FCFS和SJF的一种综合平衡。HRN同时考虑每个作业的等待时间长短和估计需要执行的时间长短,选出响应比最高的进行执行。
    优点:使得长作业也有机会投入执行
    缺点:每次调度都要计算响应比 系统开销也要增加
    4、时间片轮转算法(RR)
    最公平、最古老、最简单、使用最广的算法,又称RR调度。每个进程被分配一个时间片,这是给他执行的时间。
    让进程以FCFS方式按时间片轮流使用CPU调度方式,将进程按照FCFS排成队列,每次调度将CPU分派给首进程,执行一个时间片。时间片结束发生时钟中断,
    根据程序暂停当前进程的执行,将其送到就绪队列的末尾,通过上下文切换执行当前的队首进程,进程可以未使用完一个时间片就让出CPU。
    优点:简单 平均响应时间短
    缺点:不利于处理紧急作业,时间片大小对性能影响很大。
    时间片大小的确定
        1.系统对响应时间的要求
        2.就绪队列中进程的数目
        3.系统的处理能力
    5、多级反馈队列(MFQ) UNIX采用这种调度算法
        1、进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。
        2、首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。
        3、对于同一个队列中的各个进程,按照时间片轮转法调度。比如Q1队列的时间片为N,那么Q1中的作业在经历了N个时间片后若还没有完成,则进入Q2队列等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列,直至完成。
        4、在低优先级的队列中的进程在运行时,又有新到达的作业,那么在运行完这个时间片后,CPU马上分配给新到达的作业(抢占式)。
    
进程同步的几种机制:信号量、管程、自旋锁、会合、分布式系统
    适合分布式系统的同步机制有通信顺序进程,会合,分布式进程,远程过程调用
    1、信号量(PV操作 P操作将信号量S减1,V操作将信号量S加1)信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点。
    2、管程 将共享变量和对它们的操作集中在一个模块中,操作系统或并发程序就由这样的模块构成。这样模块之间联系清晰,便于维护和修改,易于保证正确性。
     从语言的角度看,管程主要有以下特性:
    (1)模块化。管程是一个基本程序单位,可以单独编译;
    (2)抽象数据类型。管程是中不仅有数据,而且有对数据的操作;
    (3)信息掩蔽。管程外可以调用管程内部定义的一些函数,但函数的具体实现外部不可见;
    3、自旋锁。调用者申请的资源如果被占用,即自旋锁被已经被别的执行单元保持,则调用者一直循环在那里看是否该自旋锁的保持着已经释放了锁。自旋锁是一种比较低级的保护数据结构和代码片段的原始方式,可能会引起以下两个问题; 1、死锁 2、过多地占用CPU资源 传统自旋锁由于无序竞争会导致“公平性”问题。
    4、会和。进程直接相互作用。当一个任务调用另一个任务的入口,而且被调用者已经准备好接收这个调用,便发生了会合。
    5、分布式进程。分布式操作系统中没有公共内存,参数全部为值参。

一、进程间的通信方式
管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
消息队列( messagequeue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
信号 (sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
共享内存(shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
套接字(socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
二、线程间的通信方式
锁机制:包括互斥锁、条件变量、读写锁
 互斥锁提供了以排他方式防止数据结构被并发修改的方法。
 读写锁允许多个线程同时读共享数据,而对写操作是互斥的。
 条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
信号量机制(Semaphore):包括无名线程信号量和命名线程信号量
信号机制(Signal):类似进程间的信号处理
线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。

Linux中常用到的命令
  显示文件目录命令ls        如ls
  改变当前目录命令cd        如cd /home
  建立子目录mkdir           如mkdir xiong
  删除子目录命令rmdir       如rmdir /mnt/cdrom
  删除文件命令rm            如rm /ucdos.bat
  文件复制命令cp            如cp /ucdos /fox
  获取帮助信息命令man      如man ls
  显示文件的内容less        如less mwm.lx

一次完整的HTTP请求所经历的7个步骤
HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:
1. 建立TCP连接
在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。
2. Web浏览器向Web服务器发送请求命令
一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET/sample/hello.jsp HTTP/1.1。
3. Web浏览器发送请求头信息
浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
4. Web服务器应答
客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。
5. Web服务器发送应答头信息
正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。
6. Web服务器向浏览器发送数据
Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
7. Web服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

HTTP请求报文格式
    HTTP请求报文分为三个部分 请求行、请求头、请求体。
    请求行包括请求方法、请求地址、协议及版本 请求地址(url)包括协议、主机、路径、参数
    请求头用于传递一些附加信息 格式键: 值 冒号后面有个空格。

长连接和短连接
长连接:数据传输完成保持TCP连接不断开(不发送RST包、不四次握手),等待在同域名下继续使用这个通道传输数据,否则是短链接
长连接关闭:在HTTP请求报文首部加上Connection:close

OSI七层模型
    应用层 http ftp dns
    表示层 ASCLL PICT TIFF JPEG MIDI MPEG
    会话层 RPC SQL NFS ASP
    传输层 TCP UDP SPX
    网络层 IP ICMP
    数据链路层 802.2 HDLC、FRAME RELAY
    物理层
 TCP三次握手和四次挥手的全过程

三次握手:
第一次握手:客户端发送连接请求包(SYN=1,seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到连接请求包,必须发送响应包(ACK=1,ack=x+1),由于TCP是全双工连接,所以同时自己也发送一个连接请求包(SYN=1,seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包(ACK=1,ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
四次握手:
与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。
第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了
(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

在浏览器中输入www.baidu.com后执行的全部过程
1、客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。
2、在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。
3、客户端的网络层不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。
4、客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。

TCP和UDP的区别
TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。
TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般。

TCP可靠传输、流量控制和拥塞控制的实现
可靠传输:
对于收到的请求,给出确认响应
超时重传
流量控制:
    所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。利用滑动窗口实现流量控制。也就是流水线中未确认分组数不能超过某个数N。
拥塞控制:
    所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。    
慢开始
  慢开始的“慢”并不是指增长速率的慢,而是指在TCP开始发送报文段时先设置拥塞窗口为1。
拥塞避免
  使拥塞窗口按线性规律增长。
快重传
  发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待为其设置的重传计时器到期。
快恢复(与快重传配合使用)
  当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把慢开始门限减半。这是为了预防网络发生拥塞。请注意,接下来不执行慢开始算法。

DNS域名系统,简单描述其工作原理。
    当DNS客户机需要在程序中使用名称时,它会查询DNS服务器来解析该名称。
    客户机发送的每条查询信息包括三条信息:包括:指定的DNS域名,指定的查询类型,DNS域名的指定类别。
    基于UDP服务,端口53. 该应用一般不直接为用户使用,而是为其他应用服务,如HTTP,SMTP等在其中需要完成主机名到IP地址的转换。
    主机向本地域名服务器的查询一般采用递归查询。
    本地域名服务器向根服务器的查询一般采用迭代查询。    

ARP (Address Resolution Protocol) 是个地址解析协议。最直白的说法是:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。
发布了106 篇原创文章 · 获赞 285 · 访问量 59万+

猜你喜欢

转载自blog.csdn.net/qq_35580883/article/details/79358034