半路出家从事软件测试,计算机基础相当薄弱,工作一段时间告诉我基础这个东西,不会的话会踩大坑。
这些知识点来源于网络,回归于网络。
如果发现有错误的地方,欢迎斧正!
测试人员需要了解计算机基础么?入行到现在的感触告诉我,基础能多有多深就学多深。《计算机系统概论》这本书提倡一个观点:从问题的开始到计算机运算出结果概述为七个层次,就可以完成问题到结果的转变。
第一层:问题到算法的转变
第二层:算法到程序设计语言的转换
第三层:程序到指令集结构(ISA)的转换
第四层:指令集结构到微观结构的转换
第五层:微观结构到电路的转换
第六层:电路到电路组件的转换
第七层:书中没找到,盲猜是电路组件的发现
如果我们所测产品是小程序,APP,Web 这种类型的话,所用到的知识大概处于第一层/第二层即可,如果我们所测的产品包含嵌入式,系统应用,算法产品,应该需要更深入的了解(没从事过,盲猜一波,个人认为能学会一层就起飞了)。
不知道我们接下来会从事什么产品,时刻准备着!
现在计算机系统由一个或多个处理器,主存,打印机,键盘,鼠标,显示器,网络接口以及各种输入输出设备构成。
如果不涉及嵌入式业务的情况下,我们测试人员不会直接和这些硬件打交道,而且我们不可能掌握所有计算机系统的细节。
将各个组件连接起来形成一个完整的系统;为各个组件提供一个运行平台。
中央处理器
CPU 是计算机的大脑,它主要和内存进行交互,从內存中提取指令并执行它。CPU 的执行周期是从內存中提取第一条指令、解码并决定它的类型和操作数,执行,然后再提取、解码执行后绠的指令。重复该循环直到程序运行完毕。
上面截图中红款里的内容,是在测试工作中需要了解的,例如配置 Nginx 的 work 数量,压测时进程池的数量,做队列时候的数量等
计算机中第二个主要的组件就是内存。理想情况下,内存应该非常快速 (比执行一条指令要快,从而不会拖慢 CPU 执行效率),而且足够大且便宜,但是目前的技术手段无法满足三者的需求。于是采用了不同的处理方式,存储器系统采用一种分层次的结构。
寄存器存在于 CPU 中,和 CPU 一样快
高速缓存由硬件控制,是 CPU 中的 L 级缓存
主存就是我们通常说的内存(RAM),临时性存储数据(断电后数据被清除),可以随时存储和读取数据。
磁盘就是我们说的硬盘,机械硬盘和固态硬盘
IDE | 已淘汰 | 133Mbps 左右 |
---|---|---|
SATA | PC 机使用 | 640 Mbps 左右 |
SCSI | 服务器使用 | 600 Mbps 左右 |
FC | 服务器使用 | 1G Mbps 左右 |
M.2 | 主流 |
机械硬盘分为:盘头、磁头、电动机、控制电路。
这个过程,说实话有点复杂。了解这个过程,对我目前的工作而言仅有的帮助是知道嵌入式产品烧录程序之后为什么需要断电重启。
流程:BIOS-->MBR-->DPT-->PBR--> Boot mgr-->bcd-->Windows.exe-->Windows 内核加载 -->整个 windows7 系统
注释: 1、按下电源键,通电加载 BIOS 自检。
2、选择第一启动设备读取主引导记录(MBR)。
3、主引导记录读取 DPT,查找活动分区。
4、读取活动分区的 PBR,通过 PRB 来加载操作系统选择菜单
5、加载操作系统内核,启动操作系统。
简单点来说就是我们主板 CMOS 芯片中保存着一个 BIOS 程序,类似于底层的系统,控制着系统启动后要先找哪个硬盘,再找哪个硬盘等,回顾使用 U 盘重装系统的过程,其中一步就是把 U 盘设置为第一启动盘。
找到启动盘之后,系统就启动成功了,如果你的计算机装了多个操作系统,那么在系统启动之后还会让选择启动哪个系统。
这是一个操作系统的简化图,最下面的是硬件,硬件包括芯片、电路板、磁盘、键盘、显示器等我们上面提到的设备,在硬件之上是软件。
大部分计算机有两种运行模式:內核态和用户态,软件中最基础的部分是操作系统,它运行在內核态中,內核态也称为管态和核心态,它们都是操作系统的运行状态,只不过是不同的叫法而已。
操作系统具有硬件的访问权,可以执行机器能够运行的任何指令。
软件的其余部分运行在用户态下。用户接口程序 ( shell 或者 GUI) 处于用户态中,并且它们位于用户态的最低层,允许用户运行其他程序,例如 Web 浏览器、电子邮件阅读器、音乐播放器等。而且,越靠近用户态的应用程序越容易编写,如果你不喜欢某个电子邮件阅读器你可以重新写一个或者换但你不能自行写一个操作系统或者是中断处理程序。这个程序由硬件保护,防止外部对其进行修改。
小学内容,但是,不一定会。
关于进制转换,入行之后接触的嵌入式项目测试,然后分析协议的时候使用到的进制转化。二进制转十六进制,然后对比协议进行分析数据;
通常情况下要掌握使用代码来完成进制转换,例如:解析设备上送的消息,如果设备上送的是二进制报文,需要转换为 16 进制来对照协议分析数据
二进制的组成为 0 和 1。计算机世界中的基础进制,通常用低电频(无限接近于)表示 0,高电频(无限接近于)表示 1。
日常使用的十进制
协议里常用的进制,例如:私有协议中制定 0B01 表示什么内容,TCP 的窗口大小是 16 位等
工作中目前没接触到,知道怎么换算即可。
最核心的内容,简单了解下先
操作系统中最核心的概念就是进程,进程是对正在运行中的程序的一个抽象。操作系统的其他所有內容都是围绕着进程展开的。进程是操作系统提供的最古老也是最重要的概念之一。即使使用的 CPU 也支持 (伪) 并发操作,它们会将一个单独的 CPU 抽象为多个虚拟机的 CPU。常说的 i7 和 i5 的区别,四核和八核,同版本 i7 比 i5 贵那么多的原因。
可以说:没有进程的抽象,操作系统将不复存在。
在计算机上运行的软件,通常被组织为若干<顺序进程>,简称为进程。一个进程就是一个 正在执行的程序实例,进程包括程序计数器,寄存器和变量的当前值。从概念上说,每个进程都有各自的虚拟 CPU,但是实际情况是 CPU 会在各个进程之间来回切换。
有个核心的思想:进程是某一类特定活动 的总和,有程序,输入,输出以及状态。单个处理器可以被若干进程共享,它用于某种调度算法决定何时停止一个进程的工作。
上图中的几种状态:
背下来,混个脸熟,敲代码的时候避免不掉这些内容
进程用于把资源集中在一起,线程则是 CPU 上调度执行的实体。
线程包含的内容如下
线程也有运行中,阻塞,就绪和终止的几种状态。每个线程都会有自己的堆栈。
顶不住了,解释不太清,看看就好,具体的敲代码理解
上面提到,同一时刻只能每个资源由一个进程使用。
例如:打印机,如果同时打印两份文档并同时输出结果,能处理么?
操作系统中有很多独占性的资源,于是就授权给进程单独访问资源的能力。
两个独占性的进程访问某个资源时,会导致两个进程都被阻塞,并且两个进程都不会释放各自的资源,这种情况就是死锁。
死锁可以发生在任何层面,在不同的机器之前发生死锁,在数据库中发生死锁(表级锁,行级锁)等
在通信过程中,只要一个信息被发出后,发送者就会启动一个定时器,定时器会记录消息的超时时间,如果超时时间到了但是消息还没有 返回,就会认为消息丢失并重新发送,通过这种方式,避免通信死锁。
例如:TCP 的连接超时时间,如果没有设置超时时间,某一端持续建立连接或者不断开连接,65535 个端口早晚会被占用完毕而导致没有端口可用。
死锁是一直占用占用资源,榆木脑袋,不会转弯。
活锁就是太机灵,弄巧成拙。某些情况下,当进程意识到它不能获取所需要的下一个锁时,就会尝试礼貌的释放已经获得的锁,然后等待非常短的时间再次尝试获取。可以想像一下这个场景:当两个人在狭路相逢的时候,都想给对方让路,相同的步调会导致双方都无法前进。
就像张三和王五都暗恋李四,但是每次到表白的时候就感觉李四不喜欢自己,没有张开口,不表白又暗自伤心。就这样,三个人孤独终老。
这个文档是目的更多是作为自己的沉淀,有些地方目前解释不清楚,后面有能力的话会慢慢补起来的。
语雀:https://www.yuque.com/docs/share/26b22e9a-5f76-4c2e-8de1-0c8c9bdf9699?#《计算机基础》