1、进程与线程的区别
进程:具有动态、并发、独立、异步的特性,以及就绪、执行、阻塞3种状态;引入是为了使多个程序可以并发的执行,以提高系统的资源利用率和吞吐量。
线程: 具有轻型实体,独立调度分派单位,可并发执行,共享进程资源等属性;引入是为了减少程序在并发执行过程中的开销,使OS的并发效率更高。
(是比进程更小的可独立运行的基本单位,可以看做是轻量级的进程)
2、死锁原因:
竞争资源:请求同一有限资源的进程数多于可用资源数
进程推进顺序非法:进程执行中,请求和释放资源顺序不合理,如资源等待链
3、进程调度算法
先来先服务调度算法FCFS:
既可以作为作业调度算法也可以作为进程调度算法;
按作业或者进程到达的先后顺序依次调度;
因此对于长作业比较有利;
短作业优先调度算法SJF:
作业调度算法,
算法从就绪队列中选择估计时间最短的作业进行处理,直到得出结果或者无法继续执行;
不利于长作业;未考虑作业的重要性;运行时间是预估的,并不靠谱 ;
高响应比算法HRN: 响应比=(等待时间+要求服务时间)/要求服务时间;
时间片轮转调度RR:
按到达的先后对进程放入队列中,然后给队首进程分配CPU时间片,
时间片用完之后计时器发出中断,暂停当前进程并将其放到队列尾部,循环 ;
多级反馈队列调度算法:
目前公认较好的调度算法;
设置多个就绪队列并为每个队列设置不同的优先级,第一个队列优先级最高,其余依次递减。
优先级越高的队列分配的时间片越短,进程到达之后按FCFS放入第一个队列,
如果调度执行后没有完成,那么放到第二个队列尾部等待调度,
如果第二次调度仍然没有完成,放入第三队列尾部……
只有当前一个队列为空的时候才会去调度下一个队列的进程。
4、 动态分区分配又称为可变分区分配。
这种分区方法不预先将内存划分,而是在进程装入内存时,
根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。
因此系统中分区的大小和数目是可变的。
首次适应(First Fit)算法:
空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。
最佳适应(Best Fit)算法:
空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。
最坏适应(Worst Fit)算法: 又称最大适应(Largest Fit)算法,
空闲分区以容量递减的次序链接。找到第一个能满足要求的空闲分区,也就是挑选出最大的分区。
5、页面置换算法
最佳置换算法:
只具有理论意义的算法,用来评价其他页面置换算法。
置换策略是将当前页面中在未来最长时间内不会被访问的页置换出去。
先进先出置换算法:
简单粗暴的一种置换算法,没有考虑页面访问频率信息。
每次淘汰最早调入的页面。
最近最久未使用算法LRU:
算法赋予每个页面一个访问字段,用来记录上次页面被访问到现在所经历的时间t,
每次置换的时候把t值最大的页面置换出去(实现方面可以采用寄存器或者栈的方式实现)。
时钟算法clock(也被称为是最近未使用算法NRU):
页面设置一个访问位,并将页面链接为一个环形队列,页面被访问的时候访问位设置为1。
页面置换的时候,如果当前指针所指页面访问为为0,那么置换,
否则将其置为0,循环直到遇到一个访问为位0的页面。
改进型Clock算法:
在Clock算法的基础上添加一个修改位,替换时根究访问位和修改位综合判断。
优先替换访问位和修改位都是0的页面,其次是访问位为0修改位为1的页面。
最少使用算法LFU:
设置寄存器记录页面被访问次数,每次置换的时候置换当前访问次数最少的。
6、TCP/IP 五层网络模型:
应用层:规定应用程序的数据格式,主要的协议 HTTP,FTP,WebSocket,POP3 等;
传输层:建立“端口到端口” 的通信,主要的协议 TCP,UDP;
网络层:建立”主机到主机”的通信,主要的协议 IP,ARP ,IP 协议的主要作用:一个是为每一台计算机分配 IP 地址,另一个是确定哪些地址在同一子网;
数据链路层:确定电信号的分组方式,主要的协议:以太网协议;
物理层:负责电信号的传输。
Socket 是连接应用层与传输层之间接口(API)
7、TCP/IP协议族按照层次由上到下,层层包装。
最上面是应用层,这里面有http,ftp,等等我们熟悉的协议。
第二层是传输层,著名的TCP和UDP协议就在这个层次。
第三层是网络层,IP协议就在这里,它负责对数据加上IP地址和其他的数据以确定传输的目标。
第四层是数据链路层,这个层次为待传送的数据加入一个以太网协议头,并进行CRC编码,为最后的数据传输做准备。
1.数据链路层
物理层负责0、1比特流与物理设备电压高低、光的闪灭之间的互换。
数据链路层负责将0、1序列划分为数据帧从一个节点传输到临近的另一个节点,
这些节点是通过MAC来唯一标识的(MAC,物理地址,一个主机会有一个MAC地址)。
封装成帧:把网络层数据报加头和尾,封装成帧,帧头中包括源MAC地址和目的MAC地址。
透明传输:零比特填充、转义字符。
可靠传输:在出错率很低的链路上很少用,但是无线链路WLAN会保证可靠传输。
差错检测(CRC):接收者检测错误,如果发现差错,丢弃该帧。
2.网络层
----IP协议是TCP/IP协议的核心,所有的TCP,UDP,ICMP,IGCP的数据都以IP数据格式传输。
IP不是可靠的协议,没有提供一种数据未传达以后的处理机制,
这被认为是上层协议——TCP或UDP要做的事情。
----在数据链路层中我们一般通过MAC地址来识别不同的节点,而在IP层我们也要有一个类似的地址标识,这就是IP地址。
32位IP地址分为网络位和地址位,这样做可以减少路由器中路由表记录的数目,
有了网络地址,就可以限定拥有相同网络地址的终端都在同一个范围内,
那么路由表只需要维护一条这个网络地址的方向,就可以找到相应的这些终端了。
A类IP地址:1.0.0.0~127.0.0.0
B类IP地址:128.0.0.0~191.255.255.255
C类IP地址:192.0.0.0~223.255.255.255
----IP协议头,这里只介绍:八位的TTL(Time To Live)字段。
这个字段规定该数据包在穿过多少个路由之后才会被抛弃。
某个IP数据包每穿过一个路由器,该数据包的TTL数值就会减少1,
当该数据包的TTL成为零,它就会被自动抛弃。
这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了,
根据系统的不同,这个数字也不一样,一般是32或者是64。
8、TCP和UDP
当对网络通讯质量有要求的时候TCP
比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。
当对网络通讯质量要求不高的时候UDP
要求网络通讯速度能尽量的快。
9、DNS(Domain Name System,域名系统)
因特网上作为域名和IP地址相互映射的一个分布式数据库,
能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
DNS协议运行在UDP协议之上,使用端口号53。
10、TCP三次握手和四次挥手
三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
----如client不会向server的确认发出确认,
server由于收不到确认,就知道client并没有要求建立连接。
server的很多资源就不会白白浪费掉了。
----第一次握手 建立连接。
客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;
然后,客户端进入SYN_SEND状态,等待服务器的确认;
----第二次握手 服务器收到SYN报文段。
服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,
设置Acknowledgment Number为x + 1(Sequence Number + 1);
同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;
服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,
一并发送给客户端,此时服务器进入SYN_RECV状态;
----第三次握手 客户端收到服务器的SYN+ACK报文段。
然后将Acknowledgment Number设置为y + 1,向服务器发送ACK报文段,
这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
----第一次分手 主机1(可以使客户端,也可以是服务器端),
设置Sequence Number,向主机2发送一个FIN报文段;
此时,主机1进入FIN_WAIT_1状态;
这表示主机1没有数据要发送给主机2了;
----第二次分手 主机2收到了主机1发送的FIN报文段,
向主机1回一个ACK报文段,
Acknowledgment Number为 Sequence Number加1;
主机1进入FIN_WAIT_2状态;
主机2告诉主机1,我“同意”你的关闭请求;
----第三次分手 主机2向主机1发送FIN报文段,
请求关闭连接,同时主机2进入LAST_ACK状态;
----第四次分手 主机1收到主机2发送的FIN报文段,
向主机2发送ACK报文段,
然后主机1进入TIME_WAIT状态;
主机2收到主机1的ACK报文段以后,就关闭连接;
此时,主机1等待2MSL(MSL:Maximum Segment Lifetime,报文段最大生存时间)
依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。
----MSL是任何报文段被丢弃前在网络内的最长时间
假设新连接和已经关闭的老连接端口号是一样的,
如果前一次连接的某些数据仍然滞留在网络中(称为Lost Duplicate),
这些延迟数据在建立新连接之后才到达主机2,
由于新连接和老连接的端口号是一样的,
TCP协议就认为那个延迟的数据是属于新连接的,
这样就和真正的新连接的数据包发生混淆了。
所以TCP连接要在TIME_WAIT状态等待2倍MSL,
保证本次连接的所有数据都从网络中消失。
11、一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成
1.请求行
请求行分为三个部分:请求方法、请求地址和协议版本
----HTTP/1.1 定义的请求方法有8种:
GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。
最常的两种GET和POST,
如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT。
----请求地址
URL:统一资源定位符,是一种自愿位置的抽象唯一识别方法。
组成:<协议>://<主机>:<端口>/<路径>
----请求数据
可选部分,比如GET请求就没有请求数据。
2.状态代码为3位数字。
1xx:指示信息——表示请求已接收,继续处理。
2xx:成功——表示请求已被成功接收、理解、接受。
3xx:重定向——要完成请求必须进行更进一步的操作。
4xx:客户端错误——请求有语法错误或请求无法实现。
5xx:服务器端错误——服务器未能实现合法的请求。
12、TCP/IP简介
----在 TCP/IP 中包含一系列用于处理数据通信的协议:
1.TCP (传输控制协议) - 应用程序之间通信
2.UDP (用户数据包协议) - 应用程序之间的简单通信
3.IP (网际协议) - 计算机之间的通信
4.ICMP (因特网消息控制协议) - 针对错误和状态
5.DHCP (动态主机配置协议) - 针对动态寻址
----当应用程序希望通过 TCP 与另一个应用程序通信时,
它会发送一个通信请求。
这个请求必须被送到一个确切的地址。
在双方“握手”之后,
TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。
这个全双工的通信将占用两个计算机之间的通信线路,
直到它被一方或双方关闭为止。
----IP 是无连接的通信协议。
它不会占用两个正在通信的计算机之间的通信线路。
这样,IP 就降低了对网络线路的需求。
每条线可以同时满足许多不同的计算机之间的通信需要。
通过 IP,消息(或者其他数据)被分割为小的独立的包,
并通过因特网在计算机之间传送。
IP 负责将每个包路由至它的目的地。
----当一个 IP 包从一台计算机被发送,
它会到达一个 IP 路由器。
IP 路由器负责将这个包路由至它的目的地,
直接地或者通过其他的路由器。
在一个相同的通信中,一个包所经由的路径可能会和其他的包不同。
而路由器负责根据通信量、网络中的错误或者其他参数来进行正确地寻址。
----TCP/IP 意味着 TCP 和 IP 在一起协同工作。
–TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信。
IP 负责计算机之间的通信。
–TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。
IP 负责将包发送至接受者。
12、TCP/IP寻址
----32 比特 = 4 字节
TCP/IP 使用 32 个比特来编址。
一个计算机字节是 8 比特。
–所以 TCP/IP 使用了 4 个字节。
一个计算机字节可以包含 256 个不同的值:
00000000、00000001、00000010、00000011、00000100、00000101、00000110、00000111、00001000 … 直到 11111111。
–所以TCP/IP 地址是介于 0 到 255 之间的 4 个数字。
----12 个阿拉伯数字很难记忆。使用一个名称更容易。
用于 TCP/IP 地址的名字被称为域名。
键入一个域名像 http://www.w3school.com.cn 这样的域名时
会被一种 DNS 程序翻译为数字。
–在全世界,数量庞大的 DNS 服务器被连入因特网。
DNS 服务器负责将域名翻译为 TCP/IP 地址,
同时负责使用新的域名信息更新彼此的系统。
–当一个新的域名连同其 TCP/IP 地址一同注册后,
全世界的 DNS 服务器都会对此信息进行更新。
13、TCP/IP协议
TCP/IP 是不同的通信协议的大集合。
协议族
TCP/IP 是基于 TCP 和 IP 这两个最初的协议之上的不同的通信协议的大的集合。
TCP - 传输控制协议
TCP 用于从应用程序到网络的数据传输控制。
TCP 负责在数据传送之前将它们分割为 IP 包,
然后在它们到达的时候将它们重组。
IP - 网际协议
IP 负责计算机之间的通信。
IP 负责在因特网上发送和接收数据包。
HTTP - 超文本传输协议
HTTP 负责 web 服务器与 web 浏览器之间的通信。
HTTP 用于从 web 客户端(浏览器)向 web 服务器发送请求,
并从 web 服务器向 web 客户端返回内容(网页)。
HTTPS - 安全的 HTTP
HTTPS 负责在 web 服务器和 web 浏览器之间的安全通信。
作为有代表性的应用,
HTTPS 会用于处理信用卡交易和其他的敏感数据。
SSL - 安全套接字层
SSL 协议用于为安全数据传输加密数据。
SMTP - 简易邮件传输协议
SMTP 用于电子邮件的传输。
MIME - 多用途因特网邮件扩展
MIME 协议使 SMTP 有能力通过 TCP/IP 网络传输多媒体文件,
包括声音、视频和二进制数据。
IMAP - 因特网消息访问协议
IMAP 用于存储和取回电子邮件。
POP - 邮局协议
POP 用于从电子邮件服务器向个人电脑下载电子邮件。
FTP - 文件传输协议
FTP 负责计算机之间的文件传输。
NTP - 网络时间协议
NTP 用于在计算机之间同步时间(钟)。
DHCP - 动态主机配置协议
DHCP 用于向网络中的计算机分配动态 IP 地址。
SNMP - 简单网络管理协议
SNMP 用于计算机网络的管理。
LDAP - 轻量级的目录访问协议
LDAP 用于从因特网搜集关于用户和电子邮件地址的信息。
ICMP - 因特网消息控制协议
ICMP 负责网络中的错误处理。
ARP - Address Resolution Protocol
ARP - 用于通过 IP 来查找基于 IP 地址的计算机网卡的硬件地址。
RARP - Reverse Address Resolution Protocol
RARP 用于通过 IP 查找基于硬件地址的计算机网卡的 IP 地址。
BOOTP - Boot Protocol
BOOTP 用于从网络启动计算机。
PPTP - 点对点隧道协议
PPTP 用于私人网络之间的连接(隧道)。
4、TCP/IP邮件
电子邮件是 TCP/IP 最重要的应用之一。
写邮件时用到的是电子邮件程序,
例如莲花软件的 Notes,微软公司出品的 Outlook,或者 Netscape Communicator 等等。
邮件程序会使用不同的 TCP/IP 协议:
使用 SMTP 来发送邮件
使用 POP 从邮件服务器下载邮件
使用 IMAP 连接到邮件服务器
SMTP - 简单邮件传输协议
SMTP 协议用于传输电子邮件。
SMTP 负责把邮件发送到另一台计算机。
–通常情况下,邮件会被送到一台邮件服务器(SMTP 服务器),
然后被送到另一台(或几台)服务器,然后最终被送到它的目的地。
–SMTP 也可以传送纯文本,
但是无法传输诸如图片、声音或者电影之类的二进制数据。
–SMTP 使用 MIME 协议通过 TCP/IP 网络来发送二进制数据。
MIME 协议会将二进制数据转换为纯文本。
POP - 邮局协议
POP 协议被邮件程序用来取回邮件服务器上面的邮件。
一个使用 POP的邮件程序一旦连接上邮件服务器,
它所有的邮件都会被下载到邮件程序中(或者称之为邮件客户端)。
IMAP - 因特网消息访问协议
IMAP 协议同样被邮件程序使用。
–IMAP 协议与 POP 协议之间的主要差异是:
如果 IMAP 连上了邮件服务器,
它不会自动地将邮件下载到邮件程序之中。
–IMAP可以在下载邮件之前先通过邮件服务器端查看他们。
可以选择下载这些邮件或者仅仅是删除它们。
–比方说需要从不同的位置访问邮件服务器,
但是仅仅希望回到办公室的时候再下载邮件,IMAP 在这种情况下会很有用。