程序员的自我修养--读书笔记 (跑路人笔记)

简介: 程序员的自我修养--读书笔记 (跑路人笔记)

cpu简介

cpu功能

处理指令


控制指令的执行顺序


执行操作


产生指令相对应的控制信号并发送给相应的部件.


控制时间


对各个指令操作实施定时,在什么时间做什么操作


处理数据


对数据进行算数和轮机运算,或对其他的信息进行处理.这个功能是解释计算机指令并处理计算机软件的数据.


在早期计算机没有图形功能的时候,cpu的核心频率不高和内存频率一样,所以连接在与内存相同的I/O总线1上.但是后来由于CPU的升级以及图像化的操作普及,使慢速的I/O总线无法满足需求,为了调节CPU,内存,和告诉的图形设备,人们设计了北桥芯片用于处理高速信息的交换,为了保证北桥的结构简单就又设计出了南桥.


北桥芯片的简单作用可以理解为: 用于处理高速信号,用于处理内存高速图形设备直接告诉的交换信息.


南桥芯片的简单作用可以理解为: 用于处理低速信息(如:鼠标,键盘,USB等)汇总后交给北桥处理


image.png


挺艹的,虽然上面的硬件看着非常复杂但是其实我们不用理解他们我们只需要知道有CPU,内存,I/O这三个东西即可.


SMP于多核

在很久之前我们的CPU因为可以升级物理层面的材料,所以在过去的50年里CPU的频率从几十kHz到现在的4GHz,基本每18月就会翻一倍但是从2004年后因为CUP工艺达到了物理的极限所以CPU现在单核CPU在4GHz便止步了.


于是便出现了SMP(对称多处理器),也就是使每个CPU的在系统上所处的地位和发挥的功能相同,相对称,但是当部分问题没办法分成子问题时我们的多处理器也无法提高速度,而且这种多处理器价格昂贵所以很少用在民用笔记本上,多用在大型数据库,网络服务器,因为他们接收的大量请求之间往往是独立的.


而个人电脑使用的更多是多核的处理器,多核处理器他只保留多个核心然后共享比较昂贵的缓存部分,他和SMP的差距几乎没有,但是如果你想把CPU的每一滴都榨干那就去研究,否则就可以把多核和SMP看作同一个概念


(此段多是图书原文)


The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software (gotw.ca)书籍的文章推荐


系统软件

系统软件:传统意义上将用于管理就按及本身的软件成为系统软件.


系统软件又可以分为两种


平台性的,如操作系统内核,驱动软件,运行库….

程序开发的,比如编译器,汇编器,连接器等开发工具和开发库.

书中主要介绍系统软件的部分及连接器和库(运行库和开发库)的相关内容.


计算机系统软件体系结构采用一种层结构.


整个体系结构从上到下都是按照严格的层次结构设计的,不仅计算机系统软件整个体系是这样的,体系中的每个组件(包括操作系统本身,应用程序….)都是按照层次的结构组织和设计的.


系统软件体系构造中,各种软件的位置如下图:


image.png


图 1–3 计算机软件体系结构


注:下面到分割线都是博主的一些无关于书籍的思考,可以选择跳过,但是最好还是瞅几眼


看到这里博主在纳闷为啥操作系统内核可以控制到硬件毕竟软件是一个虚无的东西,于是就查到本质上软件是如何驱动硬件的? - 知乎 (zhihu.com)这篇文章和代码是如何控制硬件的? - 知乎 (zhihu.com)这篇文章,我就可以理解了其实根本没有所谓的软件,一切都是硬件里固定的电流电子罢了,就像人类的大脑,我们在想思想是如何控制人类的时候其实我们并没有所谓的思想,都是我们自己抽象出来的,我们的大脑说到底也是通过电信号等来控制我们来敲字,敲代码等.


而我们的代码的操控其实也就是一些电信号在开关的电路中流动而已.


也就是说一切都是来自实体而非抽象层面的任何事物,抽象出的东西只是方便我们理解罢了.


更加具体的博主说不出来相关书籍看的太少了,这件事我的理解也仅限于上面两篇文章了.


我们还是主要以抽象的层次面来讲解此书吧.(碍于博主实力问题🤦‍♂️)


咳咳,我们讲到每个体系甚至每个体系的组件都是采用层式结构的.


我们的层式结构有着很好的优点,比如我们层次之间的通信我们只要保证我们的接口不变或不动我们层里的任何内容都可以被修饰或者优化甚至替换.正是因为层结构我们的应用程序和硬件之间保持了相对的独立,使得在硬件日新月异的情况下我们的应用依旧可以正常使用.


比如我们的虚拟机技术就是通过在硬件和操作系统中增加了一层虚拟层,使一个计算机中可以运行多个操作系统.


如我们上图的图1–3所示我们最上层的是我们的应用程序,从层次结构来看开发工具和应用程序是属于同一个层次的,因为他们都是用一个接口,及操作系统的应用程序编程接口(API)–对应图1–3的操作系统API.


应用程序接口的提供者是运行库,不同的运行库提供不一样的API想Linux的Glibc库提供POSIX的API;windows的运行库提供Windows API.


运行库使用操作系统提供的系统调用接口,系统调用接口在实现中往往以**软件中断2**的方式提供


操作系统内核层对于硬件层来说是硬件接口的使用者,而硬件是接口的定义者,硬件接口的定义决定了操作系统内核,具体来说就是驱动程序如何操作硬件,如何于硬件进行通信这种接口往往叫做硬件规格,这个规格是由厂家来负责提供的.而操作系统和驱动程序都是需要开发者通过阅读硬件规格文档来编写的.


操作系统做什么

在过去CPU的资源十分昂贵,如果CPU只能运行一个程序那简直就是暴谴天物于是人们很快就编写了一个监控程序,当某个程序暂时无需使用CPU时监控程序就把另一个等待CPU资源的程序启动,使CPU充分利用起来,这种方法就被称为多道程序.


但是这种方法在程序之间不分轻重缓急.


于是协作模式就出现了它使每个程序都运行一段时间以后主动让出CPU给其他程序使一段时间内程序都有运行时间,程序的协作模式叫做分时系统.


但是上面的协作模式其实问题还是很大,如果我们执行一个while(1)的命令就会使整个系统停止.


所以出现了我们现在所熟悉的多任务系统操作系统接管了所有的硬件资源,并且操作系统本身运行在一个收到硬件保护的级别,然后讲所有应用程序都已进程的方式运行在比操作系统权限更低的级别, CUP则由操作系统进行分配,如果一个程序占用时间过长我们的操作系统就会暂停此进程, 并把CPU资源分配给他认为目前最需要的进程.


设备驱动

操作系统在对硬件进行管理的时候,也是会有麻烦的,比如不同型号的硬件的管理方式是不同的,所以为了方便操控硬件,我们的操作系统会为硬件提供接口,而使用操作系统提供接口的是我们的硬件厂商生产出的硬件驱动.这样我们就可以从硬件的细节中抽离出来,来更多的关注应用程序本身的开发.


最终部分硬件也慢慢的抽象化成了文件的形式(比如Windows就讲图形硬件抽象成了GDI….)


计算机内部各个部件间以及计算机与外设间进行数据传输的信号线,总线同一时间内只有一个设备主动进行信号传输,其余设备只能被动接受 ↩︎


一种延迟执行机制,完全由软件触发. ↩︎


相关文章
|
程序员 数据安全/隐私保护
读书笔记_卓越程序员密码
The Pragmatic Programmers 图灵程序设计丛书 卓越程序员密码 The Developer's Code  What Real Programmers Do Author: Ka Wai Cheung 翻译: 劳佳 人民邮电出版社 第1章 引言1.1 谁是21世纪的程序员我是一个无认证但是超级有逻辑的心理学家、理疗师、机械师、外交官、商人和教师,我
1129 0
|
Web App开发 IDE 测试技术
《卓有成效的程序员》读书笔记
在今年的的ThoughtWorks China away day上,我见到了这本书的作者neal ford, 我们还有过简单的交流,并一起去爬了长城。惭愧的是当时我并没有读过他写的这本书。直到今天我拿到了这本书,并花了大半天的时间通读了一遍。
966 0
|
程序员
《我也能做CTO-程序员职业规划》读书笔记
2011年的计划到现在还没有做出来,最主要的原因是10年的方向并不清楚。趁着过年在家闲着的这段时间,把《我也能做CTO-程序员职业规划》这本书看一看,希望能对年度计划有所帮助。截止今日,已全部读完,以下是读书笔记。
988 0