1、计算机组成原理-位运算
(一)https://www.cnblogs.com/yrjns/p/11246163.html -- 整理所有位操作
(二)https://blog.youkuaiyun.com/weixin_34284188/article/details/88016444 -- 详细介绍无符号位移
重点:
带符号位移(左移<<< 右移>>>)无符号位移(左移<<< 右移>>>)区别:
右移>>:各二进位全部右移若干位,低位(移出的位数)丢弃,高位补符号位(符号位负补1),或者补零(符号位正补0)
无符号右移>>>:各二进位全部右移若干位,高位补零,低位丢弃。
左移<<:各二进位全部左移若干位,高位丢弃,低位补0。
无符号左移是不存在的,因为左右在低位补位,而低位没有正负数的概念,因此不存在无符号左移
注意:用位移进行运算可能会造成精度丢失,位移位数超出字节数就会归零。
应用:
a) 编码过程中常用指定数的位移来做标记
2、浮点数的表示范围与精度
(一)https://blog.youkuaiyun.com/whoisleft/article/details/77417541 -介绍了浮点数,定点数
(二)https://c.runoob.com/front-end/58 - 十进制转二进制工具
重点:
浮点数所能表示的范围取决于阶码;精度取决于尾数。
比如单精度浮点数(32位),阶码8位,尾数那就是24位咯(尾数中内含一位符号位);
比如双精度浮点数(64位),阶码11位,尾数那就是53位(一样,小数部分最多支持52位)。
上溢:运算结果超过了浮点数所能表达的最大正数或最小负数,数据一旦产生上溢,计算机必须中断运算操作,进行溢出处理。
下溢:运算结果趋于0,精度不够表示,计算机将其当做机器0处理。
应用:
a)计算机浮点数表示小数部分时只能精确表示0.5,0.25,0.125这些小数,以及精确表示这些小数想加而得到的小数。绝大部分小数,像0.1,0.2,0.3,0.4浮点数无法精确表示,只能通过增加尾数位数去无限接近,但尾数位数有限,计算机会进行舍入截断。从而造成了JavaScript中类似0.1 + 0.2 > 0.3 这样的问题。
b) https://blog.youkuaiyun.com/qq_33237207/article/details/82109352 -- 关于js浮点数计算精度不准确问题的解决办法
3、多级存储系统
(一)https://blog.youkuaiyun.com/qq_42839596/article/details/104484185 - 介绍了多级存储结构
重点:
在计算机系统中存储层次可分为高速缓冲存储器、主存储器、辅助存储器三级。“Cache-主存”层次主要解决CPU和主存速度不匹配问题,“主存-辅存”辅助存储器用于扩大存储空间。
Cache工作原理:程序访问存在时间局部性和空间局部性,Cache按照局部性策略,预测CPU在未来一段时间内欲访内存中的数据,将其装入Cache。Cache和主存都被分成若干大小相等的块,它仅保留主存中最活跃的若干块的副本。
需要注意的是,主存和Cache之间的数据调动是由硬件自动完成的,主存和辅存的数据调动是由硬件和操作系统共同完成的。
应用:
a) 借鉴Cache中主存块的替换算法:先进先出(FIFO)算法、近期最少使用(LRU)算法、最不经常使用(LFU)算法。后两者都是通过计数器实现。
4、指令集
(一)https://blog.youkuaiyun.com/qq_36636525/article/details/80376989 - 对比了CISC指令集和RISC指令集
重点:
指令是计算机执行某种操作的命令,是计算机运行的最小功能单元。
一条指令包含:操作码字段、地址码字段两部分。操作码决定指令功能,如算术运算、位移、返回等;地址码给出被操作的信息的地址,地址码个数>=0
5、操作系统
(一)操作系统知识点整理
重点:
操作系统包括进程管理、内存管理、设备管理、文件管理,其基本特征包括并发、共享、虚拟和异步(进程管理集中体现4个特点)。
操作系统负责管理软硬件资源,为用户提供的接口主要分两类:一类是命令接口,用户利用这些操作命令来组织和控制作业的执行;另一类是程序接口,由一组系统调用命令组成,用户在程序中使用这些命令请求操作系统提供服务,如使用外设、磁盘文件操作等。当前最流行的用户界面(GUI图形接口)是通过调用程序接口实现的。
进程实体=PCB + 程序段(代码段) + 数据段。PCB是进程存在的唯一标志;程序段可以被多个进程共享,就是说多个进程可以运行同一个程序(例如word,浏览器等多进程应用)。
进程通信是指进程之间的信息交换。按通信类型分为共享存储(共享一块存储空间进行读/写)、消息传递(利用操作系统提供的消息传递方法)、管道通信(所谓“管道”是指一个共享文件-pipe文件,用于连接一个读进程和一个写进程)。
处理机调度:从就绪队列中,按照一定的算法(FCFS先来先服务、SJF短作业优先、优先级、高响应比...)选择一个进程并将处理机分配给它运行,以实现进程并发地执行。处理机调度是多道程序操作系统的基础,它是操作系统设计的核心问题。
内存管理:内存分配时要确保各进程不相互影响,通过采用“重定位寄存器”和“界地址寄存器”来实现这种保护。重定位寄存器含最小的物理地址值,界地址寄存器含逻辑地址值。当CPU切换进程时,会初始化这两个寄存器。
虚拟存储器:当程序过大无法一次性装入内存时,基于局部性原理,可以将程序的一部分装入内存,而降其余部分留在外存,就可以启动程序执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,将内存中暂时不适用的内容换出到外存上。这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器。
页面置换算法:内存页与外存页的置换。(FIFO算法、LRU最近最久未使用、CLOCK时钟置换)。
文件管理:从根目录出发找到文件的路径称绝对路径。当层次较多时,每次从根目录查询浪费时间,于是加入了当前目录,进程对文件的访问都是相对于当前目录进行的称相对路径。
应用:
a)进程同步(访问临界资源)的解决方法,常被借鉴处理代码中共享变量的同步访问。
b)进程死锁(多进程竞争资源而造成的僵局)的解决办法,常被借鉴处理多线程代码中多个共享变量互斥访问避免出现死锁状况。
c)软链接和硬链接