阅读《程序员的自我修养》后感,自我感觉对计算机内部的运转有了一个更清晰的认知。
(我想用我的生活实例去结合这本书的知识,如若出现错误希望能够指点一二。谢谢!)
在我第一次接触计算机的时候,的确思考过为啥我拿鼠标点一个浏览器的图标,这个计算机就如此聪慧的帮我打开4399小游戏。
直到如今我才了解到,不是我的错,是CPU(中央处理器)的错。
(先来说说CPU吧)
CPU
中文称“中央处理器”,类似于人类的大脑。它是由运算器和控制器组成的,而它的作用又可以分为三个部分:控制资源,分配资源,储存资源。
【摘抄:CPU的工作原理就像一个工厂对产品的加工过程:进入工厂的原料(指令),经过物资分配部门(控制单元)的调度分配,被送往生产线(逻辑运算单元),生产出成品(处理后的数据)后,再储存在仓库(存储器)中,后等着拿到市场上去卖(交由应用程序使用)。】
说到CPU,就联系到它了在计算机中的发展史
(早期的计算机硬件结构)
(其实无论是早期的计算机还是如今的大规模集成电路机或者是未来的量子计算机其硬件设备的关键都是CPU,内存,I/O控制芯片)
从当初的计算机内单个CPU到多个CPU,其期间就是人们为了缩短计算机的处理时间
在这发展的期间中又联系到SMP(SMP就相当与一个插座,对于每个需要充电的电器,都可以在不同的插口进行充电,且在充电过程中互不干扰)
【自我感觉SMP在VPN中应该发挥蛮大的作用】
这时候问题又来了,速度问题解决了,那程序运算后的成果怎样被不同的软件所得到呢?
这时侯聪明的人们又建造出了一个东西,名为:接口。运用接口时又有一个学术名称。接口在此时又涉及到了一门技术,名为:虚拟机技术。
虚拟机技术,就是在硬件和操作系统之间加了一层虚拟层,这个技术可很有用,不可小觑。自我感觉我们老师教的操作系统的运作方式就是用这门技术。还有最近在用的虚拟机,就算在虚拟机中被病毒入侵了,对本机也没啥事。此技术不错,不错👍
这时又有一个问题计算机中这么多CPU怎样不会造成资源浪费且能最大效率运用呢?
这时就出来了一个“分时系统”简而言之就是将程序运行模式变为协作模式,就是当好人,都给它运行一会。
问题又来了
要是那个占了位置的程序进了个死循环了咋办?
所以聪慧的人们又搞出了一种系统“多任务系统”,这种系统其实就是种“抢占式”的模式。【摘抄:操作系统可以强制剥夺CPU资源并且分配给它认为目前最需要的进程
类似于这种:
一个浏览器中开多个窗口,虽然我们看到的时多个窗口同时运转,其实它们是有先后顺序的
提到浏览器了,这时出现了软件。提到软件又想到硬件
硬件:计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称。例如主板、硬盘驱动器、光盘驱动器等等。
一个电脑中这么多不同的硬件,它们的操作方式及访问系统都有区别,当强大的程序员要用它们的时候该怎么办呢?
【书上描述的程序员需要关心硬件的情况感觉让我对显卡有了一定的兴趣,就让我再描述一下显卡吧】
【显卡】:是插在主板上的扩展槽里的(一般是PCI-E插槽,此前还有AGP、PCI、ISA等插槽)。它主要负责把主机向显示器发出的显示信号转化为一般电气信号,使得显示器能明白个人计算机在让它做什么。
自我感觉显卡是一个总称,它包含了很多物件,如显卡主板,显卡芯片,显示储存器,散热器等等。看下图!
(有钱人拆拆自己的主机试试)
(很期待拆机课)
回到正题,这个时候该怎么办呢?
这个时候聪明的程序员已经将操作系统升级了,已将硬件抽象成一系列概念。例如这个:
【磁盘已经被抽象成普通文件系统】
然后在操作系统中加了个“硬件驱动程序”,这个程序可以帮操作系统解决那些繁琐的硬件细节。
【这一页还提了很重要的一个内容那就是磁盘中文件的存储方式】
(硬盘中的基本存储单位是扇区,每个扇区为512字节)
硬盘中将扇区进行编号,到最后一个扇区。最后的扇区叫做“逻辑扇区号”,它的出现可以将硬盘的电子设备转为实际的盘面,磁道等。
【书中提到读取扇区的方式,就是用汇编语言结合暂存的知识】
这个时候书中又提到一个问题:“内存不够怎么办”
自我感觉作者就是想引出”虚拟地址“,这个其实跟前面提的虚拟层的作用有着一定的相似度,这个就是想让物理内存区域跟另外一个程序互不重叠。【达到隔离效果】
(这些技术很厉害,自我感觉指针,链表,暂存跟这个撇不开关系)
【分段和分页】
分段的方法其实跟虚拟地址使用的方法差不多,都是运用映射。
书中所闻:分段的基本思路是把所需要的内存空间大小的虚拟空间映射到某个地址空间。
当出现映射和虚拟地址,应该就能想到这个方法做到了隔离的效果,并且程序也不再需要关心物理地址的改变。它们只要按照从0x00000000到0x00A00000来编写程序,放置变量,不需要重新定位。
分页由名字可知它就是将地址空间分为固定大小的页。
(每一页的大小由硬件决定)
这时候书中有提到虚拟空间的页叫做虚拟页,物理内存中的页叫物理页,磁盘中的叫磁盘页。
书中提到了”页错误“,页错误这一机制对于利用虚拟内存来增加程序可用内存空间的操作系统(比如Microsoft Windows和各种类Unix系统)中都是常见且有必要的。(所以它是种操作方式)
(分页的作用其实就是为了提高CPU的使用率。在页映射的作用下,将MMU集中到CPU中)
【前面一段都是讲内存,CPU。后面就开始讲讲线程了】
线程
它是程序执行流的最小单位。它由线程ID,当前指针(PC),寄存器集合和堆栈组成。
(线程其实也是为操作系统工作的)
书上所言:一个进程由多个线程组成。而进程是操作系统结构的基础。所以到这就应该明白线程是操作系统能够进行运算调度的最小单位。
**此时书中还提到了线程的访问权限,这个我认为又扯上了指针和链表。由此我也深刻体会到了在网安中指针和链表的重要性。
此时书中提到了个重要的东西线程自己的储存空间
**它的存储空间包括了:
-
栈:栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。
(就是这个)
-
线程局部存储(TLS)
-
寄存器
(线程是并发执行)
此时书上出现了一个新的概念,线程的调度和优先级。
从调度这个名词更好的理解线程的调度就是描述一个不断在处理器上切换不同的线程的一种行为。
【线程通常拥有三个状态:运行,就绪,等待。就绪就是可以立刻运行,但CPU已经被占用。】
线程调度的方法都包含了优先级调度,轮转法。
优先级调度其实就是决定线程按照什么顺序轮流执行。而轮转法就是雨露均沾,让每个线程都执行一会。
(这使线程有了交错执行的特点)
【下节内容今晚再发】