杂记-2020.5.6

杂记-2020.5.6

  • 计算机网络为什么要分层?
  • OPFS属于哪一层协议?
  • 服务和协议的区别?
  • 为什么TCP需要进行三次握手?
  • 不满足2NF的问题是?不满足3NF是?
  • 为什么需要系统调用?
  • 什么是虚拟内存?
  • 分段与分页的区别?
  • 中断服务程序的过程?
  • 进程与线程的区别?

计算机网络为什么要分层?

      各层之间相互独立:高层是不需要知道底层的功能是采取什么硬件技术来实现的,它只需要知道通过与底层的接口就可以获得所需要的服务。
      灵活性好:各层都可以采用最适当的技术来实现,例如某一层的实现技术发生了变化,用硬件代替了软件,只要这一层的功能与接口保持不变,实现技术的变化都并不会对其他各层以及整个系统的工作产生影响。
      易于实现和标准化:由于采取了规范的层次结构去组织网络功能与协议,因此可以将计算机网络复杂的通信过程,划分为有序的连续动作与有序的交互过程,有利于将网络复杂的通信工作过程化解为一系列可以控制和实现的功能模块,使得复杂的计算机网络系统变得易于设计,实现和标准化

OPFS属于哪一层协议?

      OSPF是一种内部网关协议。首先解释一下“内部网关”的含义:
      在Internet中的路由器叫做IP网关,网关执行复杂的路由算法,需要及时地更新路由信息,而网关协议,就是用于网关之间交换路由信息的协议。提及”内部网关“就涉及到了另一个概念,叫”自治系统“。自治系统的由同构型的网关连接的因特网,所以负责交换在同一个自治系统中的路由信息的协议,叫做”内部网关协议“,在不同自治系统中交换路由信息的协议,叫做外部网关协议
      至于OPFS属于哪一层协议,存在争议:网络层,或是传输层。如何判断协议属于哪一层,大致有两种说法:一个根据报文被封装的层次数,一个根据协议的发挥的功能。最初分层的目的是为了区分网络上的各种功能,所以不少的文献把路由协议都算在网络层里。但从另一个角度,OSPF是基于IP的协议,IP协议是网络层,所以也有把OPFS认为是传输层的说法。

服务和协议的区别?

      协议是控制对等实体之间通信的规则,是水平的。服务是下层通过层间接口向上层提供的功能,是垂直的。协议的实现保证了能够向上一层提供服务,要实现本层协议还需使用下层提供的服务。

为什么TCP需要进行三次握手?

      何为TCP三握手,可以用以下的例子解释:
      TCP三次握手就好比两个人在街上隔着50米看见了对方,但是因为雾霾等原因不能100%确认,所以要通过招手的方式相互确定对方是否认识自己。
杂记-2020.5.6_第1张图片

      张三首先向李四招手(syn),李四看到张三向自己招手后,向对方点了点头挤出了一个微笑(ack)。张三看到李四微笑后确认了李四成功辨认出了自己(进入estalished状态)。
      但是李四还有点狐疑,向四周看了一看,有没有可能张三是在看别人呢,他也需要确认一下。所以李四也向张三招了招手(syn),张三看到李四向自己招手后知道对方是在寻求自己的确认,于是也点了点头挤出了微笑(ack),李四看到对方的微笑后确认了张三就是在向自己打招呼(进入established状态)。
      于是两人加快步伐,走到了一起,相互拥抱。
      在《计算机网络》一书中其中有提到,三次握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”。这种情况是:
      一端(client)A发出去的第一个连接请求报文并没有丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达另一端(server)B。本来这是一个早已失效的报文段,但是B收到此失效的报文之后,会误认为是A再次发出的一个新的连接请求,于是B端就向A又发出确认报文,表示同意建立连接。如果不采用“三次握手”,那么只要B端发出确认报文就会认为新的连接已经建立了,但是A端并没有发出建立连接的请求,因此不会去向B端发送数据,B端没有收到数据就会一直等待,这样B端就会白白浪费掉很多资源。如果采用“三次握手”的话就不会出现这种情况,B端收到一个过时失效的报文段之后,向A端发出确认,此时A并没有要求建立连接,所以就不会向B端发送确认,这个时候B端也能够知道连接没有建立。

不满足2NF的问题是?不满足3NF是?

      设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小
      目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
      一般来说,数据库只需满足第三范式(3NF)就行了。
      1NF: 即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只要数据库是关系型数据库(mysql/oracle/db2/informix/sysbase/sql server),就自动的满足1NF
      2NF: 表中的记录是唯一的, 就满足2NF, 通常我们设计一个主键来实现。满足第一范式前提,当存在多个主键的时候,才会发生不符合第二范式的情况。比如有两个主键,不能存在这样的属性,它只依赖于其中一个主键,这就是不符合第二范式。2NF想要达到的要求是尽量通过最少数量的主键,就能确定一条记录,如果不满足2NF,仅由部分主键就把该条记录确定下来,即存在字段冗余。
      3NF: 即表中不要有冗余数据, 就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放。不满足3NF会产生多于的字段,造成数据冗余。

为什么需要系统调用?

      所谓系统调用就是用户在程序中调用操作系统所提供的一些子功能,系统调用可以被看做特殊的公共子程序。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、进行I/0传输以及管理文件等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。
      显然,系统调用运行在系统的核心态。通过系统调用的方式来使用系统功能,可以保证系统的稳定性和安全性,防止用户随意更改或访问系统的数据或命令。

什么是虚拟内存?

      虚拟内存是计算机系统内存管理的一种技术。
      它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率。

分段与分页的区别?

分页 分段
作用 页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。分页是由于系统管理的需要。 段是信息的逻辑单位,它含有一组其意义相对完整的信息(比如数据段、代码段和堆栈段等)。分段的目的是为了能更好的满足用户的需要
大小 页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。 段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。
地址 分页的作业地址空间是一维的,即单一的线性空间,程序员只须利用一个记忆符(线性地址的16进制表示),即可表示一地址。 分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名(比如数据段、代码段和堆栈段等),又需给出段内地址。
权限 页只有读和写两种权限。 段有读、写和执行三种权限。

中断服务程序的过程?

(1)保护现场
      保护现场有两个含义,其一是保存程序的断点;其二是保存通用寄存器和状态寄存器的内
容。前者由中断隐指令完成,后者由中断服务程序完成。具体而言,可在中断服务程序的起始部分安排若干条存数指令,将寄存器的内容存至存储器中保存,或用进栈指令(PUSH)将各寄存器的内容推入堆栈保存,即将程序中断时的“现场”保存起来。
2.中断服务(设备服务)
      这是中断服务程序的主体部分,对于不同的中断请求源,其中断服务操作内容是不同的。例如,打印机要求CPU将需打印的一行字符代码,通过接口送入打印机的缓冲存储器中,以示打印机打印;又如,显示设备要求CPU将需显示的一屏字符代码通过接口送入显示器的显示存储器中。
3.恢复现场
      这是中断服务程序的结尾部分,要求在退出服务程序前,将原程序中断时的“现场”恢复至原来的寄存器中。通常可用取数指令或出栈指令(POP),将保存在存储器(或堆栈)中的信息这回到原来的寄存器中。
4.中断返回
      中断服务程序的最后一条指令通常是–条中断返回指令,使其返回到原程序的断点处,以继续执行原程序。

进程与线程的区别?

(1)根本区别
      进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

(2)开销
      每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

(3)所处环境
      在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)

(4)内存分配
      系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。

(5)包含关系
      没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

你可能感兴趣的:(杂记)