Day04

1. 请你说说写时拷贝

  1. 传统的fork()系统调用直接把所有的资源复制给新创建的进程,这种实现过于简单且效率低下,因为他拷贝的数据或许可以共享,或者有时候fork()创建新的子进程后,子进程往往需要调用一种exec函数以执行另一个程序。而exec函数会用磁盘上的一个新程序替换当前子程序的正文段、数据段、堆段和栈段,如果之前fork()时拷贝了内存,则这时被替换了,这是没有意义的
  2. linux的fork()使用写时拷贝。写时拷贝是一种可以推迟甚至避免拷贝数据的技术。内核此时并不复制整个进程的地址空间,而是让父子进程共享同一个地址空间。只用在需要写入的时候才会复制地址空间,从而使各个进程拥有各自的地址空间。也就是说,资源的复制是在需要写入的时候才会进行,在此之前,只有以只读方式共享。这种技术使地址空间上的拷贝被推迟到实际发生写入的时候,大大提高了效率

2. 请你说说分段和分页

  1. 分段:将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。在存储分配时,以段为单位,段与段在内存中可以不相邻接,实现了离散分配。分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间,并且有助于共享和保护
  2. 分页:用户程序的地址空间被划分为若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块,页和块的大小相等。可将用户程序的任意一页放在内存的任一块中,实现了离散分配。分页主要用于实现虚拟内存,从而获得更大的地址空间
  3. 段页式:页式存储管理能有效地提高内存利用率(解决内存碎片),而分段存储管理能反映程序的逻辑结构并有利于段的共享。
  4. 段页式存储管理方式即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。在段页式系统中,为了实现从逻辑地址到物理地址的转换,系统中需要同时配置段表和页表,利用段表和页表进行从用户地址空间到物理内存空间的映射
  5. 系统为每一个进程建立一张段表,每个分段有一张页表。段表表项中至少包括段号、页表长度和页表始址,页表表项至少包括页号和块号。在进行地址转换时,首先通过段表查到页表始址,然后通过页表找到页帧号,最终形成物理地址

3. 请你说说共享内存

  1. 共享内存·是进程间通信的一种方式。不同进程之间共享的内存通常为同一段物理内存,进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程
  2. 优点:共享内存在各种进程通信方式中具有最高的效率。访问共享内存区域和访问进程独有的内存区域一样快,并不需要通过系统调用或者其他需要切入内核的过程来完成。同时他也避免了对数据各种不必要的复制
  3. 缺点:共享内存没有提供同步机制,这使得我们在使用共享内存进行进程之间的通信时,往往需要借助其他手段来保证进程之间的同步工作

4. 请你说说 TCP 和 UDP 的区别

  1. TCP提供面向连接的可靠传输,UDP提供面向无连接的不可靠传输。UDP在很多实时性要求高的场景有很好的表现,而TCP在要求数据准确、对速度没有硬性要求的场景有很好的表现。
  2. UDP协议和TCP协议都是运输层协议,都是为应用程序服务,都具有复用(不同的应用层协议可以共用UDP和TCP协议)和分用(将数据报解析之后发给不同的应用程序)的功能。
  3. UDP提供面向无连接基于数据报的不可靠传输,TCP提供面向连接基于字节流的可靠传输
  4. UDP协议:面向无连接、尽最大努力交付、面向报文、没有拥塞控制不可靠(只管发不管过程和结果)、支持一对一、一对多、多对一、多对多的通信方式、首部开销很小(8字节)。优点是快,没有TCP各种机制,少了很多首部信息和重复确认的过程,节省了大量的网路资源。缺点是不可靠不稳定,只管数据的发送不管过程和结果,网络不好的时候很容易造成数据丢失。但又因为网络不好的时候不会影响到主机数据报的发送速率,这对很多实时的应用程序很重要,因为像语音通话、视频会议等要求源主机以恒定的速率发送数据报,允许网络不好的时候丢失一些数据,但不允许有太大的延迟,UDP很适合这种要求。
  5. TCP协议:是TCP/IP体系中非常复杂的一个协议,面向连接(需要三次握手,四次挥手)、单播(只能端对端的连接)、可靠交付(有大量的机制保护TCP连接数据的可靠性)、全双工通信(允许双方同时发送信息,也是四次挥手的原由)、面向字节流(不保留数据报边界的情况下以字节流的方式进行传输,这也是长连接的由来)、头部开销大(最少20字节)。优点是可靠、稳定、有确认、窗口、重传、拥塞控制机制,在数据传完之后,还会断开连接用来节约系统资源。缺点是慢,效率低,占用系统资源高,在传递数据之前要先建立连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接。在要求数据准确、对速度没有硬性要求的场景有很好的表现,比如FTP、HTTP/HTTPS/TCP很适合这种要求

5. 请你说说 OSI 七层模型

  1. OSI七层模型是一个协议栈,就是为了统一计算机网络标准,方便数据的交换。它自上而下依次为:应用层,管理应用进程间的通信规则。表示层,对数据进行处理。会话层,用来管理进程间的会话。传输层,提供数据的传输服务。网络层,进行逻辑地址的查询。数据链路层,建立节点的连接和信息校验。物理层,负责最底层的数据传输。
  2. 应用层:应用层是体系结构中的最高层,是应用进程间通信和交互的规则,进程指计算机中运行的程序。也是用户与应用程序之间的一个接口,操作程序(软件,web应用),进而触发更下层的服务。应用层协议有:HTTP、HTTPS、FTP、TFTP、SMTP等
  3. 表示层:对从应用层获取到的数据报文进行格式处理、安全处理和压缩处理。比如JPEG、ASCII、加密格式等
  4. 会话层:对当前主机进程和目标主机进程会话的建立、管理和终止行为
  5. 传输层:对两台主机进程提供数据传输服务。定义了传输数据的进程端口号,负责数据包的排序、差错检验和流量控制。
  6. 网络层:主要进行逻辑地址查询。协议有:ICMP、IGMP、IP
  7. 数据链路层:建立相邻节点的逻辑连接,进行逻辑地址寻址、差错检验等。协议有:ARP、RARP、PPP等
  8. 物理层:数据单位是bit,数据的传输都是通过0/1比特来实现的,负责了最底层的数据传输的建立、传输和断开

最后修改:2024 年 06 月 08 日
如果觉得我的文章对你有用,请随意赞赏