总结三大计算机基础核心知识:计算机组成原理、计算机网络、操作系统

基础对于每个人都是很重要的一步。无论你做的是什么领域的东西,计算机科学中的必修课必须是要学好的。就前端而言,OS、数据结构与算法、网络这几块内容是必须要掌握的基础的,这些基础不扎实,你的天花板势必不高。所以任何一个想要在技术这条路上走的更远的人,都应该好好学习计算机科学。——掘金《面试数十人有感》

计算机组成原理

基础笔记

冯诺依曼体系: 将程序指令和数据一起存储的计算机设计概念结构,必须有一个存储器、控制器、运算器、输入设备、输出设备

容量单位:
bit、byte、KB、MB、GB、TB、PB、EB
byte=8bit
1KB=1024byte
1MB=1024KB
1GB=1024MB
……

计算机字符与编码集:
ASCII码、Extended ASCII码
中文编码集:GB2312GBK(向下兼容GB2312,向上支持国际ISO标准,但是跨国使用就有问题了)、Unicode(万国码、统一码,如UTF-8、UTF-16)

总线和IO设备:计算机总线:提供了对外连接的接口,不同设备可以通过USB接口进行连接,促使外围设备接口的统一
总线的仲裁:为了解决总线使用权的冲突问题

  1. 链式查询
  2. 计时器定时查询
  3. 独立请求
    IO设备:字符输入设备、图像输入设备

存储器:
计算机存储器:RAM(随机存储器)、串行存储器、只读存储器(DOM)
存储器:缓存(CPU里的寄存器以及高速缓存)、主存(计算机里的内存)、辅存(磁盘、U盘等)
高速缓存是为了解决CPU与主存之间速度不匹配的问题
存储器
计算机断电,主存内容会消失,但是辅存内容仍然在,为什么?
因为主存储器是内存,RAM(随机存取存储器),RAM通过电容存储数据,必须隔一段时间刷新一次,如果断电,一段时间后将丢失所有数据。

磁盘调度算法:
1、先来先服务算法(FIFO)
2、最短寻道时间优先算法
3、扫描算法(电梯算法,每次只往一个方向移动)
4、循环扫描算法

高速缓存的替换策略:
1、随机算法
2、先进先出算法(FIFO)
3、最不经常使用算法(LFU)
4、最近最少使用算法(LRU)

CPU:
1、计算机指令系统
2、计算机运算器
3、计算机控制器
4、指令执行过程

重要概念

摩尔定律
当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上。这一定律揭示了信息技术进步的速度 。尽管这种趋势已经持续了超过半个世纪,摩尔定律仍应该被认为是观测或推测,而不是一个物理或自然法。

冯诺依曼体系
冯诺依曼是:数字计算机的数制采用二进制;计算机应该按照程序顺序执行。

  1. 采用二进制作为计算机数值计算的基础,以0、1代表数值。不采用人类常用的十进制计数方法,二进制使得计算机容易实现数值的计算。
  2. 程序或指令的顺序执行,即预先编好程序,然后交给计算机按照程序中预先定义好的顺序进行数值计算。

冯诺依曼机
根据冯·诺依曼提出的原理制造的计算机被称为冯·诺依曼结构计算机,现代计算机虽然结构更加复杂,计算能力更加强大,但仍然是基于这一原理设计的,也是冯诺依曼机。
冯诺依曼机的组成:存储器+运算器+控制器+输入设备+输出设备
其主要特征为:数字计算机的数制采用二进制;计算机应该按照程序顺序执行。

冯诺依曼机必须具备五大基本组成部件,包括:

  • 运算器:用于完成各种算术运算、逻辑运算和数据传送等数据加工处理。
  • 控制器:用于控制程序的执行,是计算机的大脑。运算器和控制器组成计算机的中央处理器(CPU)。控制器根据存放在存储器中的指令序列(程序)进行工作,并由一个程序计数器控制指令的执行。控制器具有判断能力,能根据计算结果选择不同的工作流程。
  • 存储器:用于记忆程序和数据,例如:内存。程序和数据以二进制代码形式不加区别地存放在存储器中,存放位置由地址确定。
  • 输入设备:用于将数据或程序输入到计算机中,例如:鼠标、键盘。
  • 输出设备:将数据或程序的处理结果展示给用户,例如:显示器、打印机。

冯诺依曼瓶颈
由于指令与数据放在同一内存带来的CPU利用率(吞吐率)限制就是冯诺依曼瓶颈。
指令和数据放在一起的后果是取指令和取数据不能同时进行,否则会引起访存的混乱。发展到今天,CPU的运算速度已经远远超过了访存速度,因此CPU必须浪费时间等数据。

冯诺依曼瓶颈的缓解办法有:

  1. Providing a cache between the CPU and the main memory
  2. providing separate caches or separate access paths for data and instructions (the so-called Modified Harvard architecture)
  3. using branch predictor algorithms and logic
  4. providing a limited CPU stack or other on-chip scratchpad memory to reduce memory access

程序解释
解释程序也是一种翻译程序,它将源程序作为输入并执行它,边解释边执行。它与编译程序的主要区别在于在解释程序执行的过程中不产生目标程序,而是按照源语言的定义解释执行源程序本身。

程序翻译
编译程序是一种翻译程序,它把高级语言所写的源程序翻译成等价的机器语言或汇编语言的目标程序。

高级语言
高级语言(High-level programming language)是一种独立于机器,面向过程或对象的语言。高级语言是参照数学语言而设计的近似于日常会话的语言。例如,要将2个变量相加并赋值给第三个变量,用高级语言表达为var3=var1+var2。

计算机语言具有高级语言和低级语言之分。而高级语言又主要是相对于汇编语言而言的,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。编写的程序称之为源程序。

高级语言并不是特指的某一种具体的语言,而是包括很多编程语言,如流行的java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,易语言,中文版的C语言等等,这些语言的语法、命令格式都不相同 。

汇编语言
汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。

机器语言
机器语言是机器能直接识别的程序语言或指令代码,勿需经过翻译,每一操作码在计算机内部都有相应的电路来完成它,或指不经翻译即可为机器直接理解和接受的程序语言或指令代码。机器语言使用绝对地址和绝对操作码。不同的计算机都有各自的机器语言,即指令系统。从使用的角度看,机器语言是最低级的语言。

计算机软件
计算机软件( Software,也称软件)是指计算机系统中的程序及其文档,程序是计算任务的处理对象和处理规则的描述;文档是为了便于了解程序所需的阐明性资料。程序必须装入机器内部才能工作,文档一般是给人看的,不一定装入机器。

计算机硬件
计算机硬件(Computer hardware)是指计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称。这些物理装置按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。简言之,计算机硬件的功能是输入并存储程序和数据,以及执行程序把数据加工成可以利用的形式。在用户需要的情况下,以用户要求的方式进行数据的输出。

计算机系统层次结构
计算机系统层次结构,指的是计算机系统由硬件和软件两大部分所构成,而如果按功能再细分,可分为7层。把计算机系统按功能分为多级层次结构,就是有利于正确理解计算机系统的工作过程,明确软件,硬件在计算机系统中的地位和作用。
具体层级为:

  1. 硬联逻辑级
  2. 微程序级
  3. 传统机器级
  4. 操作系统级
  5. 汇编语言级
  6. 高级语言级
  7. 应用语言级

计算机编码集
1、ASCII
ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于罗马字母表的一套电脑编码系统,它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO 646。
2、Extended ASCII码
这里面包括了常见的数学运算符、带音标的欧洲字符以及其他常用符号、表格符号等。使用了拓展的ASCII码极大的补充了原来的码表,使得计算机能表达的内容越来越丰富。
3、GB2312。
GB2312是1980年制定的中国汉字编码国家标准,是我国最早最完备的一个编码集,一共收录了7445个字符,包括6763个汉字和682个其他字符,一个汉字占用两个字节。
4、GBK。
由于GB2312不符合国际标准,中国的科学家在1995年推出了第二套完备的编码集——GBK,GBK向下兼容GB2312,向上支持国际ISO标准,收录了21003个汉字,支持全部中日韩汉字。
5、Unicode
为了统一所有文字的编码,Unicode应运而生。Unicode是一个兼容全球的字符集,定义了世界通用的符号集,可以表达全世界所有的文字和字符。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
我们平时用的UTF-8是其中一个编码规则,它以字节为单位对Unicode进行编码,平常写代码的时候都是推荐使用UTF-8编码。中文Windows操作系统默认使用GBK编码,因此,使用IDE编程时通常要设置成UTF-8编码。

知识点巩固

1.计算机的发展历史大概可以分为几个阶段?每个阶段的计算机分别有什么特点?
第一代电脑叫做电子管电脑,体积庞大,可靠性差,输入输出设备有限,内存容量只有数百字到数千字,主要以单机方式完成计算,数据表示为定点数。
第二代电脑叫做晶体管电脑,用铁淦氧磁心和磁盘作为存储器,体积和质量比电子管电脑小,运算速度进一步提高。
第三代电脑叫做集成电路电脑,包括小规模集成电路和中规模集成电路,用半导体存储器取代了铁淦氧磁心存储器,采用了微程序控制技术。
第四代电脑叫做超大规模集成电路电脑,主存储器是集成度很高的半导体存储器。20世纪80年代末期出现了多媒体电脑。
20世纪90年代人工智能系统计算机的诞生标志着第五代计算机出台。

2.你了解“摩尔定律”吗?“摩尔定律”对现代计算机产生了什么影响?
摩尔定律,是指集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也会翻倍。
影响:摩尔定律非常具有前瞻性,是对微电子行业发展的一种鼓励。因为公司会按照摩尔定律来制定发展计划,一旦公司的研发进度落后于摩尔定律,就可能被淘汰。

3.你了解冯诺依曼机吗?你是否可以大概描述冯诺依号机的基本组成和工作原理?冯诺依曼机相对于之前的计算机有什么重要改变?
冯诺依曼机的核心部件是存储器
组成:输入设备、输出设备、运算器、控制器、存储器
工作原理:输入设备将数据和程序输入到存储器中,在运行过程中,控制器从存储器中取出指令,运算器从存储器中取数据,计算,并放回到存储器中。
改进:使得计算机由专用电路计算机发展成为通用电路计算机。

4.什么是冯诺依曼瓶颈?冯诺依曼瓶颈对现代计算机产生了什么影响?
冯诺依曼瓶颈:CPU和存储器之间的速度瓶颈,导致计算机的运算速度瓶颈。
影响:现代计算机根据局部性原理设计了存储器的层次结构,缓存-主存-辅存

5.你了解程序解释和程序翻译吗?什么是编译型语言,什么是解释型语言呢?
程序解释:程序在执行的过程中逐行解释,解释一句后计算机就执行一句,不生成目标程序。
程序翻译:程序代码在编译阶段就翻译成较低层次的语言,在运行时直接运行。
编译型语言:在执行之前,需要经过编译系统将高级语言编译成机器语言文件。
解释型语言:在运行的时候再翻译,不需要经过单独的编译程序。

6.请你列举十种以上的编程语言,并分别分类他们属于什么类型的语言。
编译型语言:C、c++、GO、OC。
解释型语言:Python、PHP、Javascript。
编译+解释:Java、C#。

7.你了解计算机的层次结构吗?今天的软件和硬件是怎么界定的。
计算机的层次结构:数字逻辑层、微体系结构层、指令系统层、操作系统机器层、汇编语言层、面向问题语言层。
结构划分:指令系统层之上为软件层,指令系统层之下为硬件层。

8.请你尝试说明高级语言、汇编语言和机器语言的区别和联系?
高级语言,是方便程序员描述程序逻辑的编程语言。
汇编语言,方便程序员描述硬件逻辑的语言。
机器语言,方便机器运行和理解。

9.请完成常见的容量换算公式:
1) 1G=(1024^3) Bytes
2) 1Byte=(8) bits
3).一条内存条的容量大约2(GB)
4).一个磁盘的容呈大约1(TB)
5) .一个SSD的容量大约256(GB)

10.CPU的速度一般使用什么做单位?它具有什么物理意义?
赫兹,也称为CPU的时钟频率。代表CPU产生信号的频率。

11.网络的速度一般使用什么做单位?
Mbps,兆比特每秒

12.20世纪80年代以前的计算机是不支持输入中文的,当时的计算机使用的是什么编码集?
Extended-ASCII

13.ASCII编码集占用多少个字节?
7

14.’A, ‘b’, ‘C对应的ASCII十进制数值分别是多少?
65、98、67

15.你可以使用你熟悉的语言将72、96、108转换为ASCII码吗?
char c = 72;
c = 96;
c = 108;

16.你知道Unicode编码和UTF-8编码的区别和联系吗?
Unicode是一个符号集,规定了符号以及符号对应的二进制代码,却没有规定这个二进制代码怎么存储。
UTF-8就是一种Unicode编码的实现形式,规定了每个符号的具体实现编码,使用不定长字节表示字符。

17.假设有10000个汉字,6000个日本字,3000个韩国字,1000个特殊字符,如果让你设计一套通用的编码集,请问每个字至少几个比特位?
10000+6000+3000+1000 = 20000 15位

1.计算机的总线就像是计算机的”高速公路”,你是否可以说出总线主要的功能和分类?
功能,将计算机的各个部件连接在一起,一般用来连接CPU、存储器和IO设备。
分类:片内总线、系统总线;系统总线可以分为数据总线、地址总线、控制总线。

2.什么是总线标准,为什么需要总线标准,现在有哪些常见的总线标准?
总线标准是用来规范系统与各模块、模块与模块之间的一个互联的标准。
有了总线标准,不同的厂商就可以按照同样的标准和规范来生产设备,达到互通互联的目的。
常见标准:ISA、PCI、USB、PCIe。

3.常说的”IO设备“,“I”、“O”分别是什么的缩写?
IO设备分别是是Input和Output的缩写

4.常见的输入设备可以分为什么种类?
字符输入:键盘。
图像输入:鼠标、数位板、扫描仪。

5.常见的输出设备可以分为什么种类?
输出设备的分类:屏幕、打印机。

6.日常常见的计算机外设(显示器、键盘、鼠标、打印机),分别属于什么设备?
输出、输入、输入、输出。

7.输入输出接口一般需要完成什么工作,可以把接口的线路分为什么线路?
将外部设备与CPU连接起来,进行信息交换。
线路分类:数据线、状态线、命令线、地址线。

8.DMA的全称是什么?
直接存储器访问。

9.程序中断和DMA相比, 有什么优劣?
优势:程序中断实现简单,DMA设备成本较高。
劣势:需要频繁中断CPU,降低CPU的处理效率。

10.你是否可以清晰的表述计算机存储器的层次结构?存储器的层次结构是为了解决什么问题的?
存储器的层次结构:缓存、主存、辅存。
缓存-主存为了解决主存速度不够的问题,主存-辅存为了解决主存容量不够的问题。

11.什么是局部性原理,局部性原理对计算机存储系统的设计产生了什么影响?
局部性原理:时间局部性:一个被使用的内存块可能在不远的将来被再次使用;空间局部性:一个被使用过的内存块的附近的内存可能被使用。
影响:计算机存储器层次结构的每一层都会缓存下一层(更慢一层)的一部分数据。

12.计算机存储系统的每一个层次分别有什么特点?
速度越快,成本越高;离CPU越远,速度越慢。

13.计算机的辅助存储器一般是指计算机硬盘,你了解计算机磁盘的物理结构吗?
磁盘一般有多个盘片,每个盘片上有一个磁头,各磁头之间是同步移动的。每个盘片又被划分为磁道(柱面)、扇区。 磁盘读取时间 = 寻道+旋转+传输。

14.磁盘的调度算法有哪些?分别有什么特点?
先来先服务算法FIFO:根据进程请求访问磁盘的先后顺序进行调度。
最短寻道时间SSTF:在请求队列中,找到最近的进行服务。
电梯算法(扫描算法)SCAN:摆动式扫描算法、每次移动的方向单一,只能向里或者向外。
循环扫描算法C-SCAN:磁头单向移动、访问到一端的终点后,立即回到另一端点。

15.计算机的主存一般是指计算机内存,内存有什么特点?
内存是CPU能直接寻址的存储单元,存取速度快,一般采用RAM存储。停电时数据丢失。

16.请解释概念:主存、辅存、Cache、RAM、ROM?
主存:直接给CPU提供存储的设备,高速,断电无法保存。
辅存:一般指外部存储器,比如硬盘、光盘等等,这类存储器断电后仍然可以保存数据。
Cache:缓存,设于CPU与内存之间。
RAM:随机访问存储器,断电丢数据。
ROM:只读存储器,存储后无法修改或删除。

17.什么是字?什么是字块?
字:一个存储单元中的二进制单元,字长就是字的位数。
字块:存储于连续的存储单元中被看作一个单元的一组字。

18.计算机的高速缓存一般是指Cache, Cache一般位于计算机的什么硬件设备上?
位于主板或者CPU上。

19.一般使用什么指标去评估主存-高速缓存的性能?
命中率、访问效率。

20.命中率是怎么定义的?
访问缓存的次数/总访问次数。

21.访问效率是怎么定义的?
访问缓存的时间/总访问时间。

22.假设CPU执行某段程序共计访问Cache命中4800次, 访问主存200次, 已知Cache的存取周期是30ns, 主存的存取周期是提高了多少?
命中率 = 4800 / 5000 = 0.96
平均访问时间 = 30ns * 0.96 + 150ns * 0.04 = 34.8ns
访问效率 = 30/34.8 = 0.8621 = 86%
提高了(150-34.8)/150 * 100% = 76.8%

23.请描述LFU、LRU、FIFO缓存置换算法的过程。
LFU:最少使用算法,淘汰使用频次最小的内存块。
LRU:最近使用算法,淘汰最近没有使用的页面。
FIFO:先进先出算法,最先进入的内存块被最早替换出去。

24.计算机的指令一般由操作码和地址码组成,那么计算机指令可以分类为几种类型?
指令类型:移位操作指令、数据传输指令、控制指令和算术逻辑操作指令。

25.对计算机指令数据的寻址有哪几种方式?
立即寻址、直接寻址、间接寻址。

26.计算机的运算器主要由什么组成?控制器呢?
运算器组成:ALU、状态寄存器、累加器(数据缓冲器)、通用寄存器。
控制器组成:程序计数器PC、控制单元CU、指令寄存器IR。

27.请简述计算机.指令的执行过程。
主要分为取指令、分析指令、执行指令。
从PC中取指令地址放到MAR中,控制单元根据MAR中的地址到内存中取指令,取回的指令放在MDR中,MDR将指令交给译码器ID进行解析,然后执行指令。

计算机网络

基础笔记

计算机网络层次结构:

  1. 层次结构设计的基本原则——保证数据通路顺畅、识别目的计算机、目的计算机的状态、苏剧是否错误……
    1)各层之间相互独立
    2)每一层要有足够的灵活性
    3)各层之间完全解耦
  2. OSI七层模型
    应用层:所有能产生网络流量的程序
    表示层:在传输之前是否要进行加密、压缩处理、二进制、ASCII码
    会话层:可以通过会话查木马 netstat -n
    传输层:可进行可靠传输、流量控制、不可靠传输
    网络层:负责选择最佳路径,规划ip地址
    数据链路层:定义帧的开始和结束,实现透明传输(中间转义)、差错校验
    物理层:网络设备的接口标准、电器标准、如何在物理链路上传输更快的速度
    只获得了一些理论化的成果,但是在市场化方面没有成功地推进,并没有被广为使用
  3. TCP/IP四层模型(重点)
    1)应用层(HTTP/FTP/SMTP/POP3…)
    2)传输层(TCP/UDP)
    3)网络层(IP)
    4)网络接口层(Ethernet/PPP)

OSI参考模型对网络排错的指导:
1、物理层故障:查看连接状态、发送和接收的数据包
2、数据链路层故障:MAC地址冲突、ADSL欠费、网速没办法协商一致、计算机连接到错误的WLAN
3、网络层故障:配置了错误的ip子网掩码、配置了错误的网关、路由器上没有到达网络的路由
4、应用层故障:应用程序出现错误

OSI参考模型与网络安全:
1、物理层安全:私自接入网络
2、数据链路层安全:ADSL账号密码、交换机端口绑定MAC地址
3、网络层安全:在路由器上使用ACL控制数据包流量
4、应用层安全:开发的应用程序无漏洞

计算机网络的性能指标:

  1. 速率:连接在计算机上的主机在数字信道上传送数据位数的速率,单位是b/s、kb/s、Mb/s、Gb/s等。计算思虑时别忘了除以8(按照bit来算的)
  2. 带宽:数据信道所能传送的最高数据率
  3. 吞吐量:在单位时间内通过某个网络的数据量
  4. 时延:时延=发送时延+传播时延+处理时延+排队时延
  5. 时延带宽积:时延带宽积=传播时延*带宽,表示有多少数据正在线路上
  6. 往返时间:又称RTT,从发送方发送数据开始,到发送方收到接收方确认
  7. 利用率:包括信道利用率和网络利用率。信道利用率=有数据通过的时间/总时间,网络利用率=信道利用率加权平均

计算机网络的性能指标:
1)速率(bps) bit/s
其他单位:bit、Byte、KB、MB、GB、TB、PB、EB……
2)时延(包括发送时延、传播时延、排队时延、处理时延)

什么是局域网?广域网?Internet?
局域网:覆盖范围比较小,自己花钱买设备,带宽固定自己维护 100m
广域网:距离比较远,>100m,花钱买服务买带宽,别人来维护
Internet:有很多ISP组成,有自己的机房,对网民提供访问Internet的连接

IP地址和MAC地址:
ip地址决定了这个数据包最终到哪去,MAC地址决定要想到达目的地,下一跳应该给谁
如果全球的网都是用交换机连接的,不使用路由器,这时就不需要ip地址,只需MAC地址即可,但是这种情况是不可能的。

常见的协议和端口总结:
http:tcp+80端口
http:tcp+443端口
ftp:tcp+21端口
smtp:tcp+25端口
dns:udp+53端口
……

服务和应用层协议之间的关系:
服务使用TCP或UDP的端口侦听客户端请求
客户端使用IP地址定位服务器,使用目标端口定位服务
可以在服务器网卡上设置只开放必要的端口,实现服务器网络安全

如何查看服务侦听的端口?
netstat -an
netstat -n 查看建立的会话
netstat -nb 查看建立会话的进程
telnet (ip) 测试远程计算机的某个端口是否打开
黑客进行远程扫描是为了测试有哪些服务,针对服务的漏洞进行监听
更改服务默认端口,可以迷惑入侵者,使系统更加安全

一、网络接口层

  1. 物理层———连接不同的物理设备、传输比特流
    信道:往一个方向传输信息的媒体,一条通信电路包含一个接收信道和一个发送信道
    1)单工通信信道——只能一个方向通信,没有反方向反馈的信道,如有线电视、无线收音机等
    2)半双工通信信道——双方都可以发送和接收信息,但是不能双方同时发送,也不能同时接收
    3)全双工通信信道——双方可以同时发送和接收信息
    信道分用-复用技术:信道复用,物理层帮助实现了,不需要关心

  2. 数据链路层——完成相邻设备的数据帧传输
    封装成帧、透明传输、差错检测(物理层只管传输比特流,不进行差错检测)
    如何进行差错检测?
    1)奇偶校验码(有一定局限性)
    2)循环冗余校验码CRC(广泛使用)
    最大传输单元MTU:描述传输数据帧的最大值,过大或过小都不合适
    路径MTU:木桶效应,由路径中MTU最小值决定
    MAC地址:物理地址、硬件地址(设备的身份证,唯一)
    以太网协议:数据链路层常用协议,可以完成相邻设备的数据帧传输,具体流程如下:
    1)A通过网卡发出数据帧
    2)数据帧到达路由器,路由器取出前6字节
    3)路由器匹配MAC地址表,找到对应的网络接口
    4)路由器往该网络接口发送数据帧

【思考】:如果路由器的MAC地址表中没有找到对应的记录呢?
1)路由器检查MAC地址表,发现没有对应信息
2)路由器将广播数据包到除发送方以外的端口
3)路由器将收到来自其他设备的回应,并记录其地址

二、网络层——决定数据在网络拓扑中的传输路径
IP协议

  1. 使得复杂的实际网络变为一个虚拟互联网络
  2. 使得网络层可以屏蔽底层细节而专注网络层的数据转发
  3. 解决了在虚拟网络中数据包传输路径的问题

IP地址和MAC地址的区别:MAC是永久不变的,它是物理设备的身份证;而IP地址是受网络 环境影响的,是会变化的。

三、传输层——两个设备之间是如何进行通信的(进程与进程之间的通信)
通常使用端口port来标记不同的网络进程
UDP协议:
用户数据报协议,是一个非常简单的协议
是面向报文传输的,对待数据报不合并不拆分,直接传输出去
是无连接的协议,不能保证可靠地交付数据
没有拥塞控制、首部开销非常小
TCP协议(重点!!!):
协议详解、可靠传输、流量控制、拥塞控制、三次握手、四次挥手
传输控制协议,是面向连接的协议,一个连接有两端(点到点通信)
提供可靠的传输服务
提供全双工的通信
面向字节流的协议
TCP首部是较为复杂的
TCP标记:ACK(确认位)、SYN(同步位)、FIN(终止位)……
可靠传输的基本原理:
1)停止等待协议:
只要消息没有正确到达对方,就进行超时重传。每发送一个消息,都需要设置一个定时器(超时定时器)
对信道的利用效率并不高
2)连续ARQ协议:
ARQ是自动重传请求
核心思想——滑动窗口、累计确认
可以大幅提高信道服用效率
TCP的可靠传输:
1)TCP的可靠传输基于连续ARQ协议,TCP的滑动窗口以字节位单位
2)选择重传:需要指定需要重传的字节
TCP流量控制:——让发送方发送速率不要太快,主要考虑的是点对点的通信量的控制
是使用滑动窗口实现流量控制的
当接收到窗口为0的消息,则启动坚持定时器
坚持定时器每隔一段时间发送一个窗口探测报文
TCP拥塞控制:——考虑到的是整个网络,全局性的考虑
首先使用慢启动算法(指数增长)
再使用拥塞避免算法(维护拥塞窗口变量)
TCP连接三次握手:
ACK(确认位):ACK=1确认号才生效
SYN(同步位):SYN=1表示连接请求报文
FIN(终止位):FIN=1表示释放连接
【思考】:为什么发送方要发出第三个确认报文呢?——为了防止已经失效的连接请求报文传送到对方,引起错误
TCP四次挥手:
等待定时器:等待两倍的MSL(最长报文段寿命)
为什么需要等待2倍的MSL?——最后一个报文没有确认,确保发送方的ACK可以正确到达对方,如果2MSL时间内没有收到,则接收方会重发
套接字与套接字编程:
套接字(socket)是抽象概念,表示TCP连接的一端,通常是ip和port的组合,通过套接字可以进行数据发送或接收
server端:创建套接字——绑定套接字——监听套接字——接收并处理信息
client端:创建套接字——连接套接字——发送信息
区分4个定时器https://coding.imooc.com/lesson/355.html#mid=28757
1、超时定时器
2、坚持定时器
3、等待定时器
4、保活定时器

四、应用层——离用户最近的一层
需要定义应用间通信的规则,如:
应用进程的报文类型(请求报文、响应报文)
报文的语法、格式
应用进程发送数据的时机、规则
DNS:
Domain Name System,域名系统
将域名映射到ip地址(使用域名帮助记忆)
顶级域(如com、net、org等)、二级域(如qq、taobao等)、三级域(如mail、www、game等)。
DHCP协议:——即插即用联网
动态主机设置协议,是一个局域网协议,是应用UDP协议的应用层协议
分配临时ip进行网络连接
HTTP协议:
超文本传输协议
是可靠的数据传输协议
【流程】:接收客户端连接——接收请求报文——处理请求——访问web资源——构造应答——发送应答
CDN:内容分发网络——多媒体内容加速
HTTPS协议:安全的http协议
加密模型:对称加密、非对称加密(公钥/私钥)
SSL:安全套接层

重要概念

计算机网络
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

ISP
互联网服务提供商(Internet Service Provider),简称ISP,指的是面向公众提供下列信息服务的经营者:一是接入服务,即帮助用户接入Internet;二是导航服务,即帮助用户在Internet上找到所需要的信息;三是信息服务,即建立数据服务系统,收集、加工、存储信息,定期维护更新,并通过网络向用户提供信息内容服务。

OSI七层模型
开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。它从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层

TCP/IP四层模型
TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层、网络层、传输层和应用层。每一层完成不同
的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。

TCP-IP四层模型

C/S模式
服务器-客户机,即Client-Server(C/S)结构。C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。

P2P模式
对等计算(Peer to Peer,简称p2p)可以简单的定义成通过直接交换来共享计算机资源和服务,而对等计算模型应用层形成的网络通常称为对等网络。在P2P网络环境中,成千上万台彼此连接的计算机都处于对等的地位,整个网络一般来说不依赖专用的集中服务器。网络中的每一台计算机既能充当网络服务的请求者,又对其它计算机的请求作出响应,提供资源和服务。通常这些资源和服务包括:信息的共享和交换、计算资源(如CPU的共享)、存储共享(如缓存和磁盘空间的使用)等。

RTT
RTT(Round-Trip Time): 往返时延。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。往返延时(RTT)由三个部分决定:即链路的传播时间、末端系统的处理时间以及路由器的缓存中的排队和处理时间。其中,前面两个部分的值作为一个TCP连接相对固定,路由器的缓存中的排队和处理时间会随着整个网络拥塞程度的变化而变化。所以RTT的变化在一定程度上反映了网络拥塞程度的变化。简单来说就是发送方从发送数据开始,到收到来自接受方的确认信息所经历的时间。

奇偶校验码
奇偶校验码是一种增加二进制传输系统最小距离的简单和广泛采用的方法。是一种通过增加冗余位使得码字中”1”的个数恒为奇数或偶数的编码方法,它是一种检错码。在实际使用时又可分为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验等几种。

CRC循环冗余校验码
循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。

MTU
最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。

路径MTU
路径MTU(PMTU),一种动态发现因特网上任意一条路径的最大传输单元(MTU)的技术。它对这条路径上由路由器产生的ICMP消息作了小的修改。如果在路径上的路由器没有作出修改,这种技术就不能发现正确的路径MTU,但是这种技术选出的MTU将和使用其它方法选出的MTU同样准确,甚至在许多情况下更加精确。

以太网
以太网是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网是目前应用最普遍的局域网技术,取代了其他局域网技术如令牌环、FDDI和ARCNET。

VPN
虚拟专用网络(VPN)的功能是:在公用网络上建立专用网络,进行加密通讯。在企业网络中有广泛应用。VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。VPN可通过服务器、硬件、软件等多种方式实现。

IP协议
IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据报传输服务。

ICMP协议
ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

路由表
在计算机网络中,路由表(routing table)或称路由择域信息库(RIB, Routing Information Base),是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网络周边的拓扑信息。路由表建立的主要目标是为了实现路由协议和静态路由选择。

子网掩码
子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

无分类编址CIDR
消除了传统的A类、B类和C类地址以及划分子网的概念。CIDR把32位的IP地址划分为两个部分,网络前缀和主机号。如下:
IP地址 ::={<网络地址>,<主机号>}
并使用“斜线记法”,或称为CIDR记法,即在IP地址后面加上斜线“/”,然后写上网络前缀的位数。
CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”。只需要知道CIDR地址块中的任何一个地址,就能推出这个地址块的起始地址(最小地址)和最大地址,以及地址块中的地址数。

NAT
NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。

自治系统(AS)
自治系统:autonomous system。在互联网中,一个自治系统(AS)是一个有权自主地决定在本系统中应采用何种路由协议的小型单位。这个网络单位可以是一个简单的网络也可以是一个由一个或多个普通的网络管理员来控制的网络群体,它是一个单独的可管理的网络单元(例如一所大学,一个企业或者一个公司个体)。一个自治系统有时也被称为是一个路由选择域(routing domain)。一个自治系统将会分配一个全局的唯一的16位号码,有时我们把这个号码叫做自治系统号(ASN)。

距离矢量
距离矢量(Distance Vector)是两个路由算法中的一个。另一类是链路状态路由选择。基本上,路由协议基于距离矢量算法根据目的地的远近来决定最好的路径,链路状态协议是可以使用更高级的方法根据链路的变化,例如带宽,延迟,可靠性和负载。距离矢量协议根据距离的远近来决定最好的路径。距离可能用跳数或一个metrics运算的组合来代表一个距离值。

RIP协议
RIP(Routing Information Protocol,路由信息协议)是一种内部网关协议(IGP),是一种动态路由选择协议,用于自治系统(AS)内的路由信息的传递。RIP协议基于距离矢量算法(DistanceVectorAlgorithms),使用“跳数”(即metric)来衡量到达目标地址的路由距离。这种协议的路由器只关心自己周围的世界,只与自己相邻的路由器交换信息,范围限制在15跳(15度)之内,再远,它就不关心了。RIP应用于OSI网络七层模型的应用层。各厂家定义的管理距离(AD,即优先级)如下:华为定义的优先级是100,思科定义的优先级是120。

OSPF协议
OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部。著名的迪克斯加算法被用来计算最短路径树。OSPF支持负载均衡和基于服务类型的选路,也支持多种路由形式,如特定主机路由和子网路由等。

BGP协议
边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系统交换网络可达信息。网络可达信息包括列出的自治系统(AS)的信息。这些信息有效地构造了 AS 互联的拓朴图并由此清除了路由环路,同时在 AS 级别上可实施策略决策。

知识点巩固

1.计算机网络的七层模型从顶往下分别是什么?请按顺序列举出来。
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

2.现在开发者更喜欢使用TCP/IP四层模型来划分计算机网络, 为什么TCP IIP四层模型会取代OSI七层模型被广泛使用?
OSI模型的专家缺乏实践经验,模型设计不合理,功能在各层重复出现。
TCP/IP模型更具实用性,在具体应用过程中方便实施。

3.ARP协议、RARP协议属于计算机网络的哪一个层次?
数据链路层。

4.IP协议、ICMP协议属于计算机网络的哪一个层次?
网络层。

5.传输层最重要的两个协议是什么?
TCP/UDP。

6.常见的应用层协议有HTTP协议、FTP协议等, 你还能列举一些常见的应用层协议吗?
SMTP、DNS、Telnet、DHCP、POP3。

7.路由器工作在计算机网络的哪几个层次?
网络层、网络接口层。

8.现代网络设备互联的两种模式分别是什么?他们有什么特点?
C/S和P2P。
C/S模式一方请求服务,一方提供服务,常常表现为一个服务端,多个客户端的形式。
P2P模式提供的是对等连接服务,每一个主机既可能提供服务,也可以请求服务。

9.时延是判断计算机网络质量的重要标准,网络时延由哪几个部分组成?
发送时延+排队时延+传播时延+处理时延。

10.物理层主要的作用是什么?
将物理设备连接起来,并传输比特流。

11.请列举物理层常见的传输介质。
有线传输:双绞线、同轴电缆、光纤,无线传输。

12.什么是信道,什么是单工信道、半双工信道、全双工信道?
信道是往一个方向传送信息的媒体。
单工信道:只能一个方向通信,一方发送信息,一方接收信息
半双工信道:两方都可以发送和接收,但是在同一时间,只能一个发,一个收
全双工信道:两方都可以在发送的同时接收数据

13.数据链路层的三个重要功能分别是什么?
封装成帧、透明传输、差错检测。

14.物理层只负责比特流的传输,这些数据在数据链路层称为什么?
数据帧。

15.为了界定区分一个单独的数据帧,数据链路层通常会做什么操作?
在帧的首部和尾部附加上特殊比特位作为分界。

16.假设有数据00100101需要传输,目标机器接收到的数据为10100100,请问使用奇偶校验码是否可以检测出错误?
不能。

17.假设有数据1101011011需要传输, 采用CRC的生成多项式为P(X) =X^4+X+1, 请计算添加了CRC校验码之后的数据。
1101011011 1110.

18.什么是MAC地址?如何查看本机的MAC地址?MAC地址有什么作用?
MAC是硬件的物理地址,共48位,使用12位16进制表示。
在Win系统下,cmd命令 ipconfig /all查看MAC地址。
MAC地址可以封装在以太网协议的数据帧中,表示源地址和目的地址。

19.请简述以太网的工作过程。MAC地址在其中起到了什么作用?
1.主机通过网卡发出数据帧。 2.数据帧到达路由器,路由器取出前6字节(目的地址)。 3.路由器匹配MAC地址表。 4.若该目的地址在表中,转发;若不在,广播。
MAC地址对地址进行唯一标记。

1.什么是IP地址, IP地址有什么特征?IP地址和MAC地址有什么区别和联系?
2.IP报文由IP头部和IP数据两个部分组成,IP头部一般占用多少个字节?
3.请简述IP头部包含哪些数据?
4.IP头部的TTL数据有什么作用?
5.网络层是怎么界定区分一个IP报文的?
6.路由表是网络层重要的数据结构,路由表有什么作用?
7.ARP协议有什么作用?如何清理本机的ARP缓存?
8.ARP协议的设计有一定的缺陷, 请通过搜索引擎自行搜索了解利用ARP漏洞攻击的方法。
9.IP地址一共4 Bytes, 32bits, 理论上可以表示多少个IP?
10.为了科学的使用IP地址,早期的科学家把IP地址划分为A、B、C三类IP地址,这些IP地址有什么特点?
11.A类地址理论上可以有多少个子网,每个子网理论上有多少个主机号?
12.请列举特殊的网络号和特殊的主机号。
13.如何计算一个IP的网络号是什么?
14.一个网络的掩码是255.255.255.248,请问这个网络可以连接多少台主机?
15.网络地址转换技术(NAT) 解决了什么问题?
16.NAT技术的实现原理。
17.ICMP报文和IP报文一样, 也是由头部和数据两个部分组成, 请简述ICMP报文的头部字段。
18.ICMP报文和IP报文由什么关系?ICMP报文是怎么样传输的。
19.常见的利用ICMP协议的计算机应用有ping和traceroute, 请简述这两个应用的功能, 以及这两个应用是怎么利用ICMP协议完成工作的。
20.网络层路由可以抽象成一个图算法问题,按照网络的大小可以分为内部网关协议和外部网关协议,请列举与网络路由相关的算法。
21.请简述RIP协议的过程。
22.RIP协议有什么优点和缺点?
23.请简述OSPF协议的过程, OSPF协议中起到重要的算法是什么算法?
24.OSPF协议有什么优点和缺点?
25.网络层有了RIP协议和OSPF协议, 为什么还需要BGP协议?BGP协议解决了什么问题?

1.传输层主要工作在什么地方?
2.传输层最申要的两个协议是什么?
3.端口是什么,端口有什么作用?端口在协议中一般占用几个字节?
4.UDP协议的中文全称是什么?UDP协议有什么特点?请分点说明。
5.UDP的报文和IP报文一样, 也是由头部和数据两个部分组成, 请绘制UDP头部的结构图。
6.TCP协议的中文全称是什么?TCP协议有什么特点?请分点说明。
7.TCP的报文和UDP、IP报文一样, 也是由头部和数据两个部分组成, 请绘制TCP头部的结构图,
8.TCP报文头部的序号和确认号都占据4个字节, 序号有什么用?确认号呢?
9.TCP报文头部的数据偏移字段有什么用?他和TCP报文的结构有什么关系?
10.TCP报文头部的标记占用6个比特位, 每个比特位的值可以为1或0, 他们分别有什么意义?
11.TCP报文头部的窗口占用2个字节, 窗口字段有什么作用?
12.TCP协议一个重要的特点是可靠传输, 可靠传输是怎么实现的?请简要描述可靠传输的基本原理。
13.TCP协议的流量控制和TCP报文头部的什么字段有关系?流量控制具体是怎么工作的?请简要描述流量控制的主要过程。
14.TCP协议具备拥塞控制的功能, 拥塞控制和流量控制有什么区别?拥塞控制是怎么实现的?
15.TCP协议的三次握于是非常重要的知识点, TCP协议的三次握于和TCP报文头部的哪些字段有关系?
16.请简述TCP协议三次握手的过程。
17.TCP协议的三次握手是TCP建立可靠通信的基础, 请问为什么TCP连接建立的过程叫做三次握手, 请陈述三次握手的必要性, 两次握手为什么不行?
18.TCP协议的四次挥手是非常重要的知识点, TCP协议的四次挥手和TCP报文头部的哪些字段有关系?
19.请简述TCP协议四次挥手的过程, 并说明清楚每一次挥手后, 双方进入的状态。
20.TCP连接释放的过程中有一个重要概念叫做2MSL, 什么是2MSL, 它有什么作用?
21.TCP协议有四个审要的定时器, 分别是什么定时器?请简述这些定时器的作用,
22.什么是套接字?你了解套接字的编程吗?请使用套接字实现一个简单的C/S通信工具。

1.应用层相对于其他层,是面向用户的一层,应用层协议主要解决了什么问题?
2.请列举5个以上的应用层协议。
3.什么是域名?为什么需要域名?
4.把域名解析成IP地址的服务叫做什么服务?它有什么特点。
5.DHCP协议是应用层中重要的一个协议, DHCP协议主要干了什么工作?
6.HTTP协议是广泛使用的一个协议, 也是最重要的应用层协议之一, HTTP协议解决了什么问题?
7.HTTP地址有什么特点, 一个完整的HTTP地址由哪几个部分组成?
8.HTTP协议中常用的HTTP请求方法有什么?他们分别表示什么意思。
9.HTTP服务的状态码由3位十进制数组成, 主要可以分成几类呢?
10.一个浏览器在请求服务器时,拿到了404状态码的回应,请问是什么意思?
11.一个浏览器在请求服务器时,拿到了502状态码的回应,请问是什么意思?
12.请简述HTTP请求报文的主要结构。
13.请简述HTTP应答报文的主要结构。
14.什么是缓存, 什么是Web缓存?
15.Web代理在生成环境中应用非常广泛, 一般使用Ng in x来完成代理, 请问什么是Web代理, Web代理有什么作用?
16.什么是CDN, 什么是爬虫?搜索引擎的本质是什么?
17.HTTPS是安全的HTTP协议, HTTPS应用了密码学的知识, 其中就包括对称加密和非对称加密, 请问什么是对称加密, 什么是非对称加密?
18.SSL为现代Web应用的安全作出了重要的贡献, 请简述SSL握手的主要过程。

操作系统

基础笔记

什么是操作系统?——操作系统是管理计算机硬件和软件资源的计算机程序
操作系统的基本功能:
1、能统一管理计算机资源(处理器、存储器、IO设备、文件)
2、实现了对计算机资源的抽象(用户无需面对硬件接口编程)
3、提供了用户与计算机之间的接口
操作系统相关概念:
1、并发性(需要区分什么是并行,什么是并发)
2、共享性(互斥共享形式、同时访问形式)
3、虚拟性(把一个物理实体转变为若干个逻辑实体,时分复用技术/空分复用技术)
4、异步性(进程以不可预知的速度向前推进)
为什么需要进程?
1、进程是系统进行资源分配和调度的基本单位
2、进程作为程序独立运行的载体保障程序正常执行
3、进程的存在使得操作系统资源的利用率大幅提升
进程的实体:
1、进程控制块(PCB)——包括进程标识符、处理机状态、进程调度信息、进程控制信息
2、进程与线程(Process&Thread)
进程与线程:
进程是系统进行资源分配和调度的基本单位
线程是操作系统进程运行调度的最小单位
一个进程可以并发多个线程,每个线程执行不同的任务,进程中的线程可以共享进程资源
进程5状态模型:
1、创建状态(创建进程时拥有PCB但其他资源尚未就绪)
2、就绪状态(其他资源都准备好,只差CPU资源)
3、执行状态(进程获得CPU,其程序正在执行)
4、阻塞状态(进程因某种愿意(如其他设备未就绪)而放弃CPU)
5、终止状态(进程结束由系统清理或归还PCB)
为什么需要进程同步?——生产者-消费者问题、哲学家进餐问题——需要进程间的同步
1、对竞争资源在多进程间进行使用次序的协调
2、使得并发执行的多个进程之间可以有效使用资源和相互合作
临界资源:指一些虽作为共享资源却又无法同时被多个线程共同访问的共享资源。
进程间的同步:
1、消息队列
2、共享存储
3、信号量
4、共享内存
共享存储允许不相关的进程访问同一片物理内存
共享内存是两个进程之间共享和传递数据最快的方式
共享内存未提供同步机制,需要借助其他机制管理访问
5、Unix域套接字
使用fork函数创建进程:
1、fork函数调用无参数
2、fork会返回两次,分别返回子进程id和0
3、返回子进程id的是父进程,返回0的是子进程
线程间的同步:
1、互斥量
是最简单的线程同步方法。互斥量(互斥锁)是通过加锁、解锁保证资源访问的穿行。操作系统直接提供了互斥量的API(pthread_mutex_t),开发者可以直接使用API完成资源的加锁、解锁操作
2、自旋锁
自旋锁类似于互斥量。不同的是自旋锁的线程会反复检查锁变量是否可用,是不会让出CPU的,处于一种忙等待的状态。它避免了进程或线程上下文切换的开销。在OS内部很多地方使用的是自旋锁,自旋锁并不适合在单核CPU使用。操作系统也提供了自旋锁的API(pthread_spinlock_t)
3、读写锁
是一种特殊的自旋锁。允许多个读者同时访问资源以提高读性能,但是对于写操作是互斥的。操作系统也提供了读写锁的API(pthread_rwlock_t)
4、条件变量
条件变量是一种相对复杂的线程同步方法。条件变量允许线程睡眠,直到满足某种条件时,才向该线程信号通知唤醒。操作系统也提供了自旋锁的API(pthread_cond_t、pthread_cond_wait、pthread_cond_notify)
linux进程:
1、前台进程:具有终端,可以和用户交互的进程
2、后台进程:没有占用终端,基本上不和用户交互的进程,优先级比前台进程低
3、守护进程:特殊的后台进程,很多守护进程在系统引导的时候启动,一直运行直到系统关闭,进程名称以d结尾的一般都是守护进程(常见的守护进程有crond、sshd、httpd、mysqld……)
进程与进程之间会存在父子关系,可以通过pstree命令查看
linux相关命令:ps(列出当前进程)、top、kill(杀死进程)……
进程调度:指计算机通过决策决定哪个就绪进程可以获得CPU使用权
调度机制:
1、就绪队列的排队机制——形成就绪进程队列,便于调度程序最快找到就绪进程
2、选择运行进程的委派机制——调度程序以一定的策略选择就绪进程,给它分配CPU
3、新老进程的上下文切换机制——保存当前进程的上下文信息,装入被委派执行进程的运行上下文
进程调度算法:
1、先来先服务调度算法
2、短进程优先调度算法
3、高优先权优先调度算法
4、时间片轮转调度算法(相对公平,酶促从队列头取出待执行进程,分配一个时间片执行,但不能保证及时响应用户)
死锁:指两个或两个以上的进程在执行过程中,由于资源竞争或者由于彼此通信而造成的一种阻塞现象,若无外力作用,它们都将无法推进下去。此时系统处于死锁状态。
产生死锁的四个必要条件——去除了任意一个条件都不会导致死锁的产生:
1、互斥条件:某资源只能由一个进程使用,其他资源需要使用只能等待
2、请求保持条件:进程至少保持一个资源,又申请新的资源,但新资源被占用,该进程又不释放自己保持的资源
3、不可剥夺条件:进程资源在未完成使用前不能被剥夺,只能自己释放
4、环路等待条件:存在进程-资源环形链
解决死锁的方法:银行家算法
包括1)所需资源表;2)已分配资源表;3)还需分配资源表;4)可分配资源表
核心思想:分配给满足资源条件的进程,其他不满足的进程继续等待
存储管理:
1、页式存储管理
2、段式存储管理
3、段页式存储管理
虚拟内存:
是操作系统内存管理的关键技术,把程序使用内存划分,将部分暂时不适用的内存放置在辅存。虚拟内存是对物理内存的补充,速度接近于内存,成本接近于辅存。
程序的局部性原理:
指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
虚拟内存的置换算法:
1、先进先出算法(FIFO)
2、最不经常使用算法(LFU)
3、最近最少使用算法(LRU)

linux存储管理:

  1. Buddy内存管理算法:经典的内存管理算法
    相关概念:
    1)页内碎片:已经分配出去的内存空间大于所需的内存空间,不能被利用的内存空间
    2)页外碎片:还未分配出去,但是由于大小无法分配给申请内存的新进程的内存空闲块
  2. Buddy内存管理算法具体步骤举例:

(1)分配100k内存:

  • 100k向上取2的幂128k
  • 查询是否有128k空闲内存块?
  • 没有!查询是否有256k空闲内存块?
  • 没有!查询是否有512k空闲内存块?
  • 没有!查询是否有1M空闲内存块?
  • 有!取下1M空闲内存块,分配出去
  • 拆下512k放在512k的空闲链表,其余的分配出去
  • 拆下256k放在256k的空闲链表,其余的分配出去
  • 拆下128k放在128k的空闲链表,其余的分配出去
  • 分配完毕

(2)回收100k内存:

  • 判断刚才分配的内存伙伴在空闲链表上吗?
  • 在!移除伙伴,合并为256k空闲内存,继续判断内存伙伴在空闲链表上吗?
  • 在!移除伙伴,合并为512k空闲内存,继续判断内存伙伴在空闲链表上吗?
  • 在!移除伙伴,合并为1Mk空闲内存,继续判断内存伙伴在空闲链表上吗?
  • 不在!插入1M空闲链表,回收完成

生产者-消费者问题:
生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。
要解决该问题,就必须让生产者在缓冲区满时休眠(要么干脆就放弃数据),等到下次消费者消耗缓冲区中的数据的时候,生产者才能被唤醒,开始往缓冲区添加数据。同样,也可以让消费者在缓冲区空时进入休眠,等到生产者往缓冲区添加数据之后,再唤醒消费者。通常采用进程间通信的方法解决该问题。如果解决方法不够完善,则容易出现死锁的情况。出现死锁时,两个线程都会陷入休眠,等待对方唤醒自己。该问题也能被推广到多个生产者和消费者的情形。
“哲学家进餐”问题:
有五个哲学家,他们的生活方式是交替地进行思考和进餐。他们共用一张圆桌,分别坐在五张椅子上。在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进餐完毕,放下筷子又继续思考。

重要概念

操作系统
批处理系统
分时系统
多道程序设计
并发性
共享性
虚拟性
异步性
进程
线程
进程控制块
生产者-消费者问题
哲学家进餐问题
临界资源
前台进程
后台进程
守护进程
父(子)进程
(非)抢占式调度
电梯调度算法
银行家算法
段页式存储管理
虚拟内存
交换空间
Buddy(伙伴) 算法
位示图
FAT文件系统
ext文件系统
Inode
SPOOLing技术

知识点巩固

1.最早的计算机是没有操作系统的,操作系统的诞生解决了什么问题?
2.什么是批处理操作系统,它有什么特点?
3.什么是分时操作系统,它有什么特点?
4.操作系统主要功能是什么?
5.操作系统实现了对计算机资源的抽象,这里面的计算机资源主要包括什么?
6.操作系统提供了用户与计算机之间的接口,使得用户可以通过操作系统操作计算机,这个接口主要有几种形式?
7.什么是并行?什么是并发?并行和并发有什么区别和联系?
8.操作系统的共享性对用户来说表现为什么?
9.对于计算机资源的共享,有哪两种形式?
10.什么是操作系统的虚拟性?
11.什么是操作系统的异步性?它对我们的编程有什么实际意义?
12.什么是操作系统的进程,操作系统的进程解决了什么问题?
13.进程在计算机中是以什么形式存在的?
14.PCB的全称是什么?它有什么作用?
15.什么是线程,线程与进程的关系和区别?
16.进程的五状态主要是哪五状态?你了解进程的生命周期吗?
17.什么是生产者-消费者问题,你能够编程实现吗?
18.什么是哲学家进餐问题,你能够编程实现吗?
19.进程间同步一般有哪些方法,线程间同步呢?
20.对于Linux来说, 什么是前台进程、什么是后台进程、什么是守护进程?
21.进程的调度算法可以分为两大类,抢占式调度和非抢占式调度,对于抢占式调度,主要有什么算法?
22.死锁的危害重大,什么是死锁,死锁是怎么产生的?
23.为了避免死锁,操作系统使用了什么算法?你了解这个算法的过程吗?
24.什么是段?什么是页?什么是段页式存储管理?
25.虚拟内存是什么?从根本上来说,虚拟内存解决了什么问题?
26.虚拟内存有哪些的置换算法?
27.请简述Buddy算法分配内存和回收内存的过程?
28.在Buddy算法里面, 什么是Buddy(伙伴) ?
29.在计算机里面,文件可以分为有结构文件和无结构文件,你可以列举常见的有结构文件和无结构文件吗?
30.当为文件分配辅存空间时,一般有什么分配方式?
31.FAT文件系统对应的是辅存的哪种空间分配方式?
32.ext文件系统对应的是辅存的哪种空间分配方式?
33.在辅存中,一般使用什么样的数据结构来管理存储空间?
34.文件目录树有什么作用?
35.文件描述信息包含哪些数据?
36.Linux文件有哪几种类型?
37.ext文件系统可以看做是由一个Boot Sector和若干个Block Group组成, 你能简要的描述Block Group由什么组成吗?
38.什么是文件的Inode, Inode存储了文件的什么信息?
39.什么是SPOOLing技术?计算机中常说的*脱机”是什么意思?