-
计算机组成原理核心知识点总结&面试笔试要点
2019-08-13 14:04:07作为一名计算机专业的学生,计算机组成原理、计算机网络、操作系统这三门课程可以说是专业核心基础课,是至...而且很多互联网公司在笔试和面试中都会涉及到这三门课程的知识点,因此我通过视频学习对这三门课程就行...作为一名计算机专业的学生,计算机组成原理、计算机网络、操作系统这三门课程可以说是专业核心基础课,是至关重要的,其内容是一名合格的coder所必备的知识集;非科班出身的程序员要是想要有所提升,也需要认真学习这三门课程,可以快速形成计算机知识的结构体系,理解计算机底层原理,在工作实践中可以借鉴优秀的设计;而且很多互联网公司在笔试和面试中都会涉及到这三门课程的知识点,因此我通过视频学习对这三门课程就行复习巩固,同时分三篇博客记录总结。
计算机组成原理
一 计组之概述篇
-
计算机的发展历史
第一阶段(1946-1957):电子管计算机 特点:集成度低,体积大,功耗高,运行速度慢,操作复杂。
第二阶段(1957-1964):晶体管计算机 特点:相对电子管计算机,体积小,速度快,功耗低,可靠性高,配备显示器。
第三阶段(1964-1980):集成电路计算机 特点:操作系统诞生。
第四阶段(1980-至 今):超大规模集成电路计算机 特点:集成度高,速度快,体积小,价格低,用途广泛。
第五阶段( f u t u r e) :生物计算机&&量子计算机 … -
计算机的分类
超级计算机、大型计算机、迷你计算机(普通服务器)、工作站、微型计算机(个人计算机) -
计算机的体系与结构
冯·诺伊曼体系:将程序指令和数据一起存储的计算机设计概念结构,存储器+控制器+运算器+输入设备+输出设备。
现代计算机的结构:以存储器为核心,解决冯·诺伊曼体系瓶颈问题(CPU与存储设备之间的性能差异)。
-
计算机的层次
-
计算机的字符与编码集
字符编码集的历史:ASCII码 --> Extended ASCII码
中文编码集:GB2312、GBK、Unicode(统一码、万国码)
二 计组之组成篇
-
计算机的总线与I/O设备
a.计算机的总线(Bus)
概述:连接多个设备或者接入点的数据传输通路。
作用:解决不同设备之间的通信问题。
分类:片内总线(高集成度内部的信息传输线)、系统总线(细分为:数据总线&地址总线&控制总线,是CPU、主内存、IO设备、各组件之间的信息传输线)
总线的仲裁:为了解决总线使用权的冲突问题,三种方法:链式查询、计时器定时查询、独立请求。
b.常见的输入输出设备
字符输入设备:键盘
图形输入设备:鼠标、数位板、扫描仪
图像输出设备:显示器、打印机、投影仪
c.输入输出接口的通用设计
数据线:I/O设备与主机进行数据交换的传送线(单向&双向)。
状态线:I/O设备状态向主机报告的信号线。
命令线:CPU向I/O设备发送命令(读写信号、启动停止信号)的信号线。
设备选择线:主机选择I/O设备进行操作的信号线。
d.CPU与I/O设备的通信
程序中断:提供低速设备通知CPU的一种异步的方式,CPU可以在高速运转的同时兼顾低速设备的响应。
直接存储器访问(DMA):
-
计算机的存储器
a.存储器的分类:
按照存储介质:半导体存储器(内存、U盘、固态硬盘)、磁存储器(磁带、磁盘)
按照存取方式:随机存储器RAM(随机读取,与位置无关)、串行存储器(按顺序查找,与位置有关)、只读存储器ROM(只读不写)
b.存储器的层次结构
缓存-主存层次:局部性原理,在CPU与主存之间增加一层速度快容量小的Cache,解决主存速度不足的问题。
主存-辅存层次:局部性原理,主存之外增加辅助存储器,解决主存容量不足的问题。
局部性原理:是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
c.计算机的主存储器
内存RAM(随机存取存储器Random Access Memory):通过电容存取数据,掉电将丢失所有数据。
d.计算机的辅助存储器
e.计算机的高速缓存
工作原理:命中率是衡量缓存的重要性能指标,理论上CPU每次都能从高速缓存取数据的时候,命中率为1。
高速缓存的替换时间:当缓存没有数据,需要从主存载入数据的时候。
高速缓存的替换策略:随机算法、先进先出算法(FIFO)、最不经常使用算法(LFU)、最近最少使用算法(LRU)。 -
计算机的CPU
a.计算机的指令系统
机器指令的形式:操作码(指明指令所要完成的操作)+地址码(给出操作数或操作数的地址);
机器指令的操作类型:数据传输、算术逻辑操作、移位操作、控制指令;
机器指令的寻址方式:指令寻址(顺序寻址+跳跃寻址)、数据寻址(立即寻址(速度快)+直接寻址(寻找操作数简单)+间接寻址(寻址范围大,速度慢))
b.计算机的控制器
作用:控制器是协调和控制计算机运行的。
组成:程序计数器(存储下一条指令的地址)、时序发生器(发送时序脉冲)、指令译码器(控制器的主要部件之一,翻译操作码+地址码)、指令寄存器(控制器的主要部件之一,从主存或缓存存取计算机指令)、主存地址寄存器(保存当前CPU正要访问的内存地址单元)、主存数据寄存器(保存当前CPU正要读或写的主存数据)、通用寄存器(比一般专用寄存器大,可以暂时存放或传送数据或指令,可保存ALU的运算中间结果)。
c.计算机的运算器
作用:进行数据运算加工。
组成:数据缓冲器(输入缓冲暂时存放外设送过来的数据,输出缓冲暂时存放送往外设的数据)、ALU(算术逻辑运算)、状态字及寄存器(存放运算状态和运算控制信息)、通用寄存器(比一般专用寄存器大,可以暂时存放或传送数据或指令,可保存ALU的运算中间结果)。
d.计算机指令执行的过程
指令执行过程:取指令-分析指令-执行指令
CPU的流水线设计:因运算器和控制器不能同时工作,CPU的综合利用率并不高,所以CPU的流水线设计可以提高CPU的利用率,提高大概3倍。
三 计组之计算篇
- 进制运算的基础知识
进位制:即进制,是一种计数方式,亦称进位计数法,有限种数字符号来表示无限的数值。
传送门——>关于进制转换推荐看文 - 二进制数据的表示方法
a.有符号数和无符号数
原码表示法:0表示正数,1表示负数,规定符号位位于数值的第一位;表达简单,容易理解,但运算复杂。
b.二进制的补码表示法
定义:
引入目的:为了消除减法(未完全实现)引入补码的概念,使用正数代替负数。
规律:负数的补码等于反码+1,如十进制数-7,反码表示为1,1000,补码表示为1,1001。
举个小例子计算题:
c.二进制的反码表示法
定义:
引入目的:找出原码和补码之间的规律,消除转换过程中的减法操作。
规律:负数的反码等于原码除符号位外按位取反,如十进制数-7,原码表示为1,0111,反码表示为1,1000。
举个小例子计算题:
d.小数的二进制补码表示
定义:
上述两个整数的反码补码计算规律同样适用。 - 二进制数据的运算
a.定点数与浮点数
定点数:小数点固定在某个位置。
浮点数的表示格式:符号、阶码、尾数
浮点数的表示范围:单精度± (2-2^-23) × 2127
双精度± (2-2^-52) × 21023 其中大于浮点数绝对值最大的数为上溢,小于绝对值最小的数据为下溢。
浮点数的规格化:尾数使用纯小数、尾数最高位必须是1。
b.定点数的加减法运算
加法运算:数值位与符号位一同运算,并将符号位产生的进位自然丢掉(模2^n舍去)。
举两个小栗子计算题(整数和小数):
减法运算:将B[补码]转换成-B[补码]来计算,其中-B[补码]=B[补码]连同符号按位取反,末尾加1,例如B[补码]=1,0010101 ,则-B[补码]=0,1101011。
举个小栗子计算题:
c.浮点数的加减法运算
步骤:对阶(使得阶码一致,尾数才可以运算)–>尾数求和–>尾数规格化–>舍入–>溢出判断
运算:先进行对阶,后与定点数的加减法相同。
举个小栗子计算题:
d.浮点数的乘除法运算
乘法:阶码相加,尾数求积。
除法:阶码相减,尾数求商。
四 计组之实践篇
- 实现双向链表
单向链表:节点1–>节点2–>节点3–>节点4–>节点5 其中每一个节点都有下一个节点的地址或引用。
双向链表:节点1⇋节点2⇋节点3⇋节点4⇋节点5 每一个节点都有上一个和下一个节点的地址和引用。
双向链表优点:可以快速找到上/下节点,也可以快速去掉链表中的某一个节点。
传送门——>实现双向链表 - 实现FIFO缓存置换算法
淘汰缓存时,把最先进入链表的结点淘汰掉。
传送门——> 实现FIFO缓存置换算法 - 实现LRU缓存置换算法
传送门——> 实现LRU缓存置换算法 - 实现LFU缓存置换算法
传送门——> 实现LFU缓存置换算法
五 重要知识点及笔&面试常考题目
传送门——>计算机组成原理试题1
传送门——>计算机组成原理试题2
传送门——>计算机组成原理试题3 -
-
JAVA核心知识点整理
2021-01-22 09:10:29JAVA核心知识点整理 -
计算机网络核心知识点总结&面试笔试要点
2019-08-21 22:22:23OSPF(Open Shortest Path First:开放最短路径优先)协议:核心是Dijkstra算法。 OSPF协议的过程: RIP与OSPF的对比: 3.外部网关路由协议 BGP(Border Gateway Protocol)边际网关协议:是...计算机网络之基础篇
一、计算机网络概述
1.什么是计算机网络
计算机网络主要由一些通用的、可编程的硬件互连而成,通过这些硬件,可以传送不同类型的数据,并且可以支持广泛和日益增长的应用。
2.计算机网络的分类
按照网络的作用范围:广域网(WAN)、城域网(MAN)、局域网(LAN)
按照网络使用者:公用网络、专用网络
3.计算机网络的发展历史
互联网的发展历史:
第一阶段:单个网络ARPANET,交换机+电脑
第二阶段:三层结构互联网,主干网+地区网+校园网
第三阶段:多层次ISP(Internet Service Provider,网络服务提供商)互联网,主干ISP+地区ISP+校园/公司/家庭…
中国互联网的发展历史:
1980年开始互联网实验,1989年第一个公立网络建立运行,1994年接入国际互联网。
4.计算机网络的层次结构
层次结构设计的基本原则:
各层之间是相互独立的;
每一层需要有足够的灵活性;
各层之间完全解耦。
OSI七层模型:并没有成为广泛使用的标准模型,标准制定周期过长,设计不合理。
TCP/IP四层模型:
5.计算机网络的性能指标
速率:bps=bit/s
时延:发送时延、传播时延、排队时延、处理时延
往返时间RTT:数据报文在端到端通信中的来回一次的时间。
二、物理层概述
1.物理层的作用:连接不同的物理设备,传输比特流。
2.信道的基本概念:信道是往一个方向传输信息的媒体,一条通信电路包含一个发送信道和一个接受信道。
单工通信信道:只能一个方向通信,没有反方向反馈的信道;
半双工通信信道:双方都可以发送和接受信息,但不能同时发送也不能同时接收;
全双工通信信道:双方都可以同时发送和接收。
3.信道的分用-复用技术:大大提升信道的利用率,如下图,分为频分复用、时分复用、波分复用、码分复用。
三、数据链路层
1.数据链路层概述
封装成帧:“帧”是数据链路层数据的基本单位,帧的结构如下图:
透明传输:“透明”是指即使控制字符在帧数据中,但是要当做不存在去处理。原理如下图,即在控制字符前加上转义字符ESC。
差错检测:奇偶校验码、循环冗余校验码CRC
奇偶校验码:局限性:当出错两位时,检测不到错误。
循环冗余检验码:根据传输或保存的数据而产生固定位数校验码。
2.最大传输单元
最大传输单元MTU(Maximum Transmission Unit),数据链路层的数据帧不是无限大的,数据帧长度受MTU限制。
路径MTU:由链路中MTU的最小值决定。
3.以太网协议详解
MAC地址:每一个设备都拥有唯一的MAC地址,共48位,使用十六进制表示。
以太网协议:是一种使用广泛的局域网技术,是一种应用于数据链路层的协议,使用以太网可以完成相邻设备的数据帧传输,数据格式如下:
计算机网络之网络层篇
一、网络层IP协议相关
1.IP协议详解
虚拟互联网络的产生:实际的计算机网络错综复杂;物理设备通过使用IP协议,屏蔽了物理网络之间的差异;当网络中主机使用IP协议连接时,无需关注网络细节,于是形成了虚拟网络。如下图所示:
IP协议使得复杂的实际网络变为一个虚拟互联的网络;并且解决了在虚拟网络中数据报传输路径的问题。
IP数据报的格式:
其中,版本指IP协议的版本,占4位,如IPv4和IPv6;首部位长度表示IP首部长度,占4位,最大数值位15;总长度表示IP数据报总长度,占16位,最大数值位65535;TTL表示IP数据报文在网络中的寿命,占8位;协议表明IP数据所携带的具体数据是什么协议的,如TCP、UDP。
2.IP协议的转发过程
仅从网络层来看,转发过程如下图所示:
3.IP地址的子网划分
分类的IP地址:A类(8网络号+24主机号)、B类(16网络号+16主机号)、C类(24网络号+8主机号),对比如下:
无分类编址CIDR:网络前缀+主机号,更加有效的分配IPv4的地址空间。
4.网络地址转换NAT技术
用于多个主机通过一个公有IP访问访问互联网的私有网络中,减缓了IP地址的消耗,但是增加了网络通信的复杂度。
二、网络层其他协议
1.ARP协议与RARP协议
ARP(Address Resolution Protocol)协议指地址解析协议,可以把网络层32位地址转化为数据链路层MAC48位地址。
ARP缓存表:是IP地址与MAC地址的映射对应表(IP地址是变化的):
RARP(Reverse Address Resolution Protocol)协议指逆地址解析协议,可以把数据链路层MAC48位地址转化为网络层32位地址。
2.ICMP协议
网际控制报文协议(Internet Control Message Protocol),可以报告错误信息或者异常情况,ICMP报文封装在IP数据报当中。结构如下:
ICMP协议的应用:
Ping应用:网络故障的排查;
Traceroute应用:可以探测IP数据报在网络中走过的路径。
三、IP的路由算法
1.路由的概述
关于路由算法的要求:正确的完整的、在计算上应该尽可能是简单的、可以适应网络中的变化、稳定的公平的。
自治系统AS:指处于一个管理机构下的网络设备群,AS内部网络自治管理,对外提供一个或多个出入口,其中自治系统内部的路由协议为内部网关协议,如RIP、OSPF等;自治系统外部的路由协议为外部网关协议,如BGP。
2.内部网关路由协议
a.RIP协议:
距离矢量(DV)算法:每一个节点使用两个向量Dᵢ和Sᵢ,Dᵢ描述的是当前节点到别的节点的距离,Sᵢ描述的是当前节点到别的节点的下一节点,每一个节点与相邻的节点交换向量Dᵢ和Sᵢ的信息,每一个节点根据交换的信息更新自己的节点信息,如下图:
RIP协议的过程:
(1)路由器初始化路由信息(两个向量Dᵢ和Sᵢ);
(2)对相邻路由器X发过来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)
i. 检索本地路由,将信息中新的路由插入到路由表里面
ii. 检索本地路由,对于下一跳为X的,更新为修改后的信息
iii. 检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新本地路由表
(3)如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(16跳)。
b.OSPF协议相关:
Dijikstra算法:解决有权图从一个节点到其他节点的最短路径问题,该算法“以起点为中心,向外层层扩展”。
算法描述:
(1)初始化两个集合(S, U)(S为只有初始顶点点A的集合,U为其他顶点集合);
(2)如果U不为空,对U集合顶点进行距离的排序,并取出距离A最近的一个顶点D;
i. 将顶点D的纳入S集合
ii.更新通过顶点D到达U集合所有点的距离(如果距离更小则更新,否则不更新)
iii. 重复2步骤
(3) 直到U集合为空,算法完成。
链路状态(LS)协议:向所有的路由器发送信息,消息描述该路由器与相邻路由器的链路状态(距离、时延、带宽等),只有链路状态发生变化时,才发送更新信息。
OSPF(Open Shortest Path First:开放最短路径优先)协议:核心是Dijkstra算法。
OSPF协议的过程:
RIP与OSPF的对比:
3.外部网关路由协议
BGP(Border Gateway Protocol)边际网关协议:是运行在AS之间的一种协议。计算机网络之传输层篇
一、UDP协议详解
1.UDP(User Datagram Protocol: 用户数据报协议),是一个非常简单的协议,结构如下:
2.UDP协议的特点:- UDP是无连接协议;
- UDP不能保证可靠的交付数据;
- UDP是面向报文传输的;
- UDP没有拥塞控制;
- UDP首部开销很小。
二、TCP协议
1.TCP(Transmission Control Protocol: 传输控制协议),是计算机网络中非常复杂的一个协议,其结构如下:
2.TCP协议的特点:- TCP是面向连接的协议;
- TCP的一个连接有两端,即点对点通信;
- TCP提供可靠的传输服务;
- TCP协议提供全双工通信;
- TCP是面向字节流的协议;
3.TCP首部之TCP标记的作用:
4.可靠传输的基本原理
停止等待协议:是最简单的可靠传输协议,但是该协议对信道的利用率不高。
连续ARQ(Automatic Repeat reQuest:自动重传请求)协议:滑动窗口+累计确认,大幅提高了信道的利用率。
5.TCP协议的可靠传输
基于连续ARQ协议,在某些情况下,重传的效率并不高,会重复传输部分已经成功接收的字节。
6.TCP协议的流量控制
流量控制指让发送方发送速率不要太快,TCP协议使用滑动窗口实现流量控制。
7.TCP协议的拥塞控制
拥塞控制与流量控制的区别:流量控制考虑点对点的通信量的控制,而拥塞控制考虑整个网络,是全局性的考虑。
拥塞控制的方法:慢启动算法+拥塞避免算法,如下图,纵坐标表示每一次发送数据报文的数量,横坐标表示发送的次数:
8.TCP连接的三次握手
如图所示,具体标记详见上面3.TCP标记的含义与作用:
问:为什么发送方要发出第三个确认报文呢?
答:避免已经失效的的连接请求报文传送到对方,引起错误。
9.TCP协议的四次挥手
如图所示
问:等待计时器为什么需要等待2MSL(最长报文断寿命,一般为2min)?
答:最后一个报文没有确认,确保发送方的ACK可以到达接收方,如果2MSL时间内没有收到,则接收方会重发;确保当前连接的所有报文都已经过期。
计算机网络之应用层篇
一、DNS详解
DNS(Domain Name System:域名系统):解决IP地址复杂难以记忆的问题。
1.IP—>DNS服务—>便于记忆的域名
2.域名由点、字母和数字组成,分为顶级域(com,cn,net,gov,org)、二级域(baidu,taobao,qq,alibaba)、三级域(www)
(12-2-0852)
二、DHCP协议
DHCP(Dynamic Configuration Protocol:动态主机设置协议):是一个局域网协议,是应用UDP协议的应用层协议。
作用:为临时接入局域网的用户自动分配IP地址。
三、HTTP协议
HTTP(HyperText Transfer Protocol:超文本传输协议):是可靠的数据传输协议。
HTTP请求的方式对比:
GET:请求指定的页面信息,并返回实体主体。
POST:向指定资源提交数据进行处理请求。
DELETE:请求服务器删除指定的页面。
四、HTTPS协议
HTTPS(secure)安全的HTTP协议。
持续更新。。。 -
JAVA核心知识点整理.zip
2020-03-18 14:49:22JAVA核心知识点整理 -
JAVA核心知识点.zip
2020-08-27 18:36:42一份整理的蛮不错的Java核心知识点。覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。 -
JAVA核心知识点整理.pdf
2021-02-02 21:03:12来源网络 JAVA核心知识点整理.pdf -
JAVA核心知识点整理.rar
2019-07-14 21:09:20JAVA核心知识点整理--》从Java基础-->Java数据结构-->框架-->Java中间件,缓存JAVA核心知识点整理--》从Java基础-->Java数据结构-->框架-->Java中间件,缓存JAVA核心知识点整理--》从Java基础--&... -
计算机操作系统核心知识点总结&面试笔试要点
2019-08-14 22:00:41操作系统之基础篇 一、 操作系统概述 1. 操作系统的演进 无操作系统:人工操作,用户独占,CPU等待人工操作,资源利用率很低。 批处理系统:批量输入任务,无需等待人工操作,资源利用率提升,提出多道...操作系统之基础篇
一、 操作系统概述
1. 操作系统的演进
无操作系统:人工操作,用户独占,CPU等待人工操作,资源利用率很低。
批处理系统:批量输入任务,无需等待人工操作,资源利用率提升,提出多道程序设计。
分时系统:人-机交互,多用户共享,资源利用率提升,及时调试程序。
关于多道程序设计:是指在计算机内存中同时存放多个程序,多道程序在计算机的管理程序之下相互穿插运行。
2. 操作系统的定义与目标
定义:管理硬件,提供用户交互的软件系统。
目标:方便性,有效性(提高系统资源的利用率、提高系统的吞吐量),可扩充性,开放性。
3. 操作系统的基本功能
统一管理计算机资源:处理器资源,IO设备资源,存储器资源,文件资源…
实现了对计算机资源的抽象:IO设备管理软件提供读写接口,文件管理软件提供操作文件接口…
提供了用户与计算机之间的接口:图像窗口形式,命令形式,系统调用形式…
4. 操作系统的基本特性
a.并发性
并行:指两个或多个事件可以在同一个时刻发生;
并发:指两个或多个事件可以在同一个时间间隔发生。
b.共享性:操作系统的中资源可供多个并发的程序共同使用,这种形式称之为资源共享。
互斥共享:当资源被程序占用时,其它想使用的程序只能等待。
同时访问:某种资源并发的被多个程序访问。
c.虚拟性:表现为把一个物理实体转变为若干个逻辑实体。
时分复用技术:资源在时间上进行复用,不同程序并发使用,多道程序分时使用计算机的硬件资源,提高资源的利用率。
空分复用技术:用来实现虚拟磁盘(物理磁盘虚拟为逻辑磁盘,电脑上的C盘、D盘等)、虚拟内存(在逻辑上扩大程序的存储容量)等,提高资源的利用率,提高编程效率。
d.异步性:在多道程序环境下,允许多个进程并发执行,但由于资源等因素的限制,使进程的执行以“停停走走”的方式运行,而且每个进程执行的情况(运行、暂停、速度、完成)也是未知的。
二、进程管理
1. 进程实体
a.为什么需要进程:
·进程是系统进行资源分配和调度的基本单位;
·进程作为程序独立运行的载体保障程序正常执行;
·进程的存在使得操作系统资源的利用率大幅提升。
b.进程控制块(PCB):用于描述和控制进程运行的通用数据结构,记录进程当前状态和控制进程运行的全部信息。
c.进程(Process)与线程(Thread):
线程:操作系统进行运行调度的最小单位。
进程:系统进行资源分配和调度的基本单位。
区别与联系:一个进程可以有一个或多个线程;线程包含在进程之中,是进程中实际运行工作的单位;进程的线程共享进程资源;一个进程可以并发多个线程,每个线程执行不同的任务。
2. 进程的五状态模型
就绪状态:其它资源(进程控制块、内存、栈空间、堆空间等)都准备好、只差CPU的状态。
执行状态:进程获得CPU,其程序正在执行。
阻塞状态:进程因某种原因放弃CPU的状态。
创建状态:创建进程时拥有PCB但其它资源尚未就绪。
终止状态:进程结束由系统清理或者归还PCB的状态。
3.进程同步
a.生产者-消费者问题:有一群生产者进程在生产产品,并将这些产品提供给消费者进程进行消费,生产者进程和消费者进程可以并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程需要将所生产的产品放到缓冲区中(+1操作),消费者进程可以从缓冲区取走产品消费(-1操作)。
产生问题:当两者并发执行时可能出差错,如下图:
当执行生产者+1和消费者-1操作之后,缓冲区的值从10变为了11。
程序实例–>https://blog.csdn.net/huanglei305/article/details/99621301
b.哲学家进餐问题:有5个哲学家,他们的生活方式是交替的思考和进餐,哲学家们共同使用一张圆桌,分别坐在5张椅子上,圆桌上有5只碗和5只筷子。平时哲学家们只进行思考,饥饿时则试图取靠近他们的左右两只筷子,只有两只筷子都被拿到的时候才能进餐,否则等待,进餐完毕后,放下左右筷子进行思考。
产生问题:
c.进程同步的作用:对竞争资源在多进程间进行使用次序的协调,使得并发执行的多个进程之间可以有效使用资源和相互合作。
d.进程间同步的四原则:
空闲让进:资源无占用,允许使用;
忙则等待:资源被占用,请求进程等待;
有限等待:保证有限等待时间能够使用资源;
让权等待:等待时,进程需要让出CPU。
e.进程同步的方法(重要,后面详细讲解):消息队列,共享存储,信号量。
f.线程同步的方法(重要,后面详细讲解):互斥量,读写锁,自旋锁,条件变量。
4. Linux的进程管理
a.进程的类型
前台进程:具有终端,可以和用户交互;
后台进程:基本不和用户交互,优先级比前台进程低;
守护进程:特殊的后台进程,在系统引导时启动,一直运行直到系统关闭,如crond、sshd、httpd、mysqld…
b.进程的标记
进程ID:非负整数,进程的唯一标记,每个进程拥有不同的ID;
进程的状态标记:R表示进程处于运行状态,S表示进程处于睡眠状态…
c.操作Linux进程的相关命令
ps命令:列出当前的进程,结合-aux可以打印进程的详细信息(ps -aux);
top命令:查看所有进程的状态;
kill命令:给进程发送信号。
三、作业管理
1.进程调度
定义:指计算机通过决策决定哪个就绪进程可以获得CPU使用权。
方法:
非抢占式调度:处理器一旦分配给某个进程,就让该进程一直使用下去,直到进程完成工作或IO阻塞才会让出处理器。
抢占式调度:允许调度程序以一定的策略暂停当前运行地进程。
步骤:
保留旧进程的运行信息,请出旧进程(收拾包袱);
选择新进程,准备运行环境并分配CPU。
a.三个重要的机制:
就绪队列的排队机制:为了提高进程调度的效率,将就绪进程按照一定的方式排成队列,以便调度程序可以最快找到就绪进程。
选择运行进程的委派机制:调度程序以一定的策略,选择就绪进程,将CPU资源分配给它。
新老进程的上下文切换机制:保存当前进程的上下文信息,装入被委派执行进程的运行上下文。
b.进程调度算法
先来先服务算法:按照在就绪队列中的先后顺序执行。
短进程优先调度算法:优先选择就绪队列中估计运行时间最短的进程,不利于长作业进程的执行。
高优先权优先调度算法:进程附带优先权,优先选择权重高的进程,可以使得紧迫的任务优先处理。
时间片轮转调度算法:按照FIFO的原则排列就绪进程,每次从队列头部取出待执行进程,分配一个时间片执行,是相对公平的调度算法,但是不能保证就是响应用户。
2.死锁:是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。 此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
a.死锁的产生:竞争资源(共享资源数量不满足各进程需求)、进程调度顺序不当,如下图,当调度顺序为A->B->C->D时会产生死锁,但改为A->D->B->C则不会产生。
b.死锁的四个必要条件:
互斥条件:进程对资源的使用是排他性使用,某资源只能由一个进程使用,其它进程需要使用只能等待。
请求保持条件:进程至少保持一个资源,又提出新的资源请求,新资源被占用,请求被阻塞,被阻塞的进程不释放自己保持的资源。
不可剥夺条件:进程获得的资源在未完成使用前不能被剥夺(包括OS),只能由进程自身释放。
环路等待条件:发生死锁时,必然存在进程-资源环形链.
c.死锁的处理
预防死锁的方法:破坏四个必要条件的中一个或多个。
破坏请求保持条件:系统规定进程运行之前,一次性申请所有需要的资源。
破坏不可剥夺条件:当一个进程请求新的资源得不到满足时,必须释放占有的资源。
破坏环路等待条件:可用资源线性排序,申请必须按照需要递增申请。
银行家算法:客户申请的贷款是有限的,每次申请需要申明最大资金量,银行家在能够满足贷款时,都应该给用户贷款,客户在使用贷款后,能够及时归还贷款。
具体请移步–>https://blog.csdn.net/huanglei305/article/details/99637605
四、存储管理
1.内存分配与回收
内存分配的过程:单一连续分配、固定分区分配、动态分区分配(根据实际需要,动态的分配内存)。
动态分区分配算法:
首次适应算法:分配内存时,从开始顺序查找适合内存区,若无合适内存区,则分配失败。
最佳适应算法:要求空闲区链表按照容量大小排序,遍历以找到最佳适合的空闲区。
快速适应算法:要求有多个空闲区链表,每个空闲区链表存储一种容量的空闲区。
内存回收的过程:2.段页式存储管理
页式存储管理:将进程逻辑空间等分成若干大小的页面,相应的把物理内存空间分成与页面大小的物理块,以页面为单位把进程空间装进物理内存中分散的物理块。
段式存储管理:将进程逻辑空间分成若干段(不等分),段的长度由连续逻辑的长度决定。
两者相比:
段页式存储管理:现将逻辑空间按照段式管理分成若干段,再将内存空间按照页式管理分成若干页,分页可以有效提高内存利用率,分段可以更好的满足用户需求。
三者分配内存之后的对比:
3.虚拟内存
概述:实际是对物理内存的扩充,速度接近于内存,成本接近于辅存。
局部性原理:指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
虚拟内存的置换算法:先进先出(FIFO)、最不经常使用(LFU)、最近最少使用(LRU)
4.Linux的存储管理
Buddy内存管理算法:为解决内存外碎片的问题,算法基于计算机处理二进制的优势具有极高的效率。
Linux交换空间:交换空间(Swap)是磁盘的一个分区,Linux内存满时,会把一些内存交换至Swap空间,Swap空间是初始化系统时配置的。
Swap空间与虚拟内存的对比:
五、文件管理
1.文件管理概述
a.文件的逻辑结构:
逻辑结构的文件类型:有结构文件(文本文件,文档,媒体文件)、无结构文件(二进制文件、链接库)。
顺序文件:按顺序放在存储介质中的文件,在逻辑文件当中存储效率最高,但不适合存储可变长文件。
索引文件:为解决可变长文件存储而发明,需要配合索引表存储。
b.辅存的存储空间分配:
辅存的分配方式:连续分配(读取文件容易,速度快)、链接分配(隐式链接和显式链接)、索引分配
辅存的存储空间管理:
c.目录管理:
目录树:使得任何文件或目录都有唯一的路径。
2.Linux文件的基本操作
a.Linux目录:Linux一切皆文件。
b.Linux文件常用操作:
(目录/文件)创建、删除、读取、写入
c.Linux文件类型:
3.Linux的文件系统
文件系统概览:FAT、NTFS(对FAT进行改进)、EXT2/3/4(扩展文件系统,Linux的文件系统)
EXt文件系统:
六、设备管理
1.广义的IO设备:
按照使用特性分类:存储设备(内存、磁盘、U盘)和交互IO设备(键盘、显示器、鼠标)
按照信息交换分类:块设备(磁盘、SD卡)和字符设备(打印机、shell终端)
按照设备共享属性分类:独占设备,共享设备,虚拟设备
按照传输速率分类:低速设备,高速设备
2.IO设备的缓冲区:减少CPU处理IO请求的频率,提高CPU与IO设备之间的并行性。
3.SPOOLing技术:虚拟设备技术,利用高速共享设备将低速的独享设备模拟为高速的共享设备,逻辑上,系统为每一个用户都分配了一台独立的高速独享设备。操作系统之提升篇(重点)
一、线程同步的方法
1.互斥锁
互斥锁是最简单的线程同步的方法,也称为互斥量,处于两态之一的变量:解锁和加锁,两个状态可以保证资源访问的串行。
原子性:指一系列操作不可被中断的特性,要么全部执行完成,要么全部没有执行。
2.自旋锁
自旋锁是一种多线程同步的变量,使用自旋锁的线程会反复检查锁变量是否可用,自旋锁不会让出CPU,是一种忙等待状态,即死循环等待锁被释放。
特点:避免了进程或者线程上下文切换的开销,但是不适合在单核CPU使用。
3.读写锁
是一种特殊的自旋锁,允许多个读操作同时访问资源以提高读性能,但是对写操作是互斥的,即对多读少写的操作效率提升很显著。
4.条件变量
是一种相对比较复杂的线程同步方法,条件变量允许线程睡眠,直到满足某种条件,当满足条件时,可以给该线程信号通知唤醒。
例如,在生产者-消费者问题当中,规定当缓冲区小于等于时,不允许消费者消费,消费者必须等待;缓冲区满时,不允许生产者往缓冲区生产,生产者必须等待;即当生产者生产一个产品时,唤醒可能等待的消费者,当消费者消费一个产品时,唤醒可能等待的生产者。
5.线程同步方法总结
4种线程同步方法对比:
二、进程同步
1.使用fork系统调用创建进程
使用fork系统调用无参数,fork会返回两次,分别返回子进程id和0,返回子进程id的是父进程,返回0的是子进程。
2.共享内存
在某种程度上,多进程是共同使用物理内存的,但是由于操作系统的进程管理,进程间的内存空间是独立的,因此进程默认是不能访问进程空间之外的内存空间的。
共享存储允许不相关的进程访问同一片物理内存,共享内存是两个进程之间共享和传递数据最快的方式,但是共享内存未提供同步机制,所以需要借助其它机制管理访问。即共享内存是高性能后台开发中最常用的进程同步方式。
3.Unix域套接字
域套接字是一种高级的进程间通信的方法,可以用于同一机器进程间通信。
套接字(socket):为网络通信中使用的术语。
Unix系统提供的域套接字提供了网络套接字类似的功能,如Nfinx、uWSGI等。
服务端和客户端分别使用Unix域套接字的过程:
操作系统之实践篇
实现支持异步任务的线程池
关于线程池
线程池:线程池是存放多个线程的容器,CPU调度线程执行后不会销毁线程,将线程放回线程池重新利用。
使用线程池的原因:
1.线程是稀缺资源 ,不应该频繁创建和销毁;
2.架构解耦,业务创建和业务处理解耦,更加优雅;
3.线程池是使用线程的最佳实践。
1.实现线程安全的队列Queue
队列:用于存放多个元素,是存放各种元素的“池”。
实现的基本功能:获取当前队列元素数量,往队列放入元素,往队列取出元素。
注意:队列可能有多个线程同时操作,因此需要保证线程安全,如下两种情况:
具体实现:https://blog.csdn.net/huanglei305/article/details/99701518
2.实现基本任务对象Task
任务处理逻辑:
实现的基本功能:任务参数,任务唯一标记(UUID),任务具体的执行逻辑
具体实现:https://blog.csdn.net/huanglei305/article/details/99701991
4.实现任务处理线程ProcessThread
任务处理线程需要不断地从任务队列里取任务执行,任务处理线程需要有一个标记,标记线程什么时候应该停止。
实现的基本功能:基本属性(任务队列、标记),线程执行的逻辑(run),线程停止(stop)。
5.实现任务处理线程池Pool
存放多个任务处理线程,负责多个线程的启停,管理向线程池的提交任务,下发给线程去执行。
实现的基本过程:基本属性,提交任务(put,batch_put),线程启停(start,join),线程池大小(size)。
具体实现:https://blog.csdn.net/huanglei305/article/details/99702434
6.实现异步任务处理AsyncTask
给任务添加一个标记,任务完成后,则标记为完成;任务完成时可直接获取任务运行结果;任务未完成时,获取任务结果,会阻塞获取线程。
主要实现的两个函数:设置运行结果(set_result),获取运行结果(get_result)
具体实现:https://blog.csdn.net/huanglei305/article/details/99703371 -
JAVA核心知识点整理面试宝典
2020-12-09 11:18:11JAVA核心知识点整理 java集合,jvm详解 ,java多线程,线程池高并发,java IO ,JAVA 阻塞队列原理 -
JVM学习笔记核心知识点整理
2020-09-14 11:17:57JVM学习笔记核心知识点整理,包含类文件加载机制,运行时数据,JVM内存模型,GC算法,垃圾收集器分类等 -
最全的JAVA核心知识点整理.pdf
2021-01-04 16:17:42JAVA核心知识点整理 -
超级高手总结的JAVA核心知识点手册
2020-12-01 16:51:47超级高手总结的JAVA核心知识点 -
Java核心知识点整理.rar
2020-05-21 10:46:19Java核心知识点整理,精简版本,面试前突击学习使用。包含JVM、集合、并发、Spring、微服务、中间件、设计模式、算法、缓存等相关知识的整理。 、 -
强烈推荐JAVA核心知识点整理
2020-05-14 14:25:56强烈推荐JAVA核心知识点整理,特别详细,适合收藏学习,非常好,帮助你迅速掌握java,加油了大家,下载学习 -
JAVA核心知识点整理.docx
2020-06-10 18:59:39为大家汇总了份Java核心知识点面试题和答案,基本上涵盖了所有后端技术栈,相信可以帮助大家拿到自己心仪的offer -
java核心知识点整理
2019-02-23 15:26:55java核心知识点整理 1.Java中没有多继承,而是用接口来代替多继承 2.运行一个已经编译的程序时,Java解释器总是从指定类的main方法中的代码开始执行,因此,执行代码中必须有一个main函数。 3.Java是典型的强类型... -
java面试核心知识点,283页pdf
2021-01-06 17:02:12java面试核心知识点,283页pdf,直指阿里P7