liunx第二天

本文详细介绍了计算机硬件的基础知识,包括CPU的结构、内存类型、主板的作用,以及CPU与内存的交互。讲解了单核与多核CPU、外频和倍频的概念,现代CPU设计的变化,以及内存的DRAM、SRAM和ROM。还涉及了操作系统与硬件的关系,操作系统功能,系统调用和内核功能,以及Linux系统结构。文章还涵盖了内存寻址概念,直接寻址技术和指针的使用。
摘要由CSDN通过智能技术生成

一.计算机的基础知识

1.计算机主要五大部件

1.cpu中的控制器,运算器
2.输入单元: 键盘、鼠标、触摸板等
3.输出单元: 屏幕、打印机等
4.主机单元:CPU、主板、主存储器等
主板:相当于人体的神经系统,将所有重要组件连接起来

2.计算机硬件五大部件

1.控制器:控制器是计算机的控制中心,由它指挥各个部件自动,协调地工作。 运算器+控制器=中央处理器(CPU)
2.运算器:运算器是计算机对数据进行加工处理的中心,对二进制数码进行算术运算或者逻辑运算计算机的运算速度通常是指每秒钟能够执行加法指令的数目。通常用百万次/每秒(MIPS)来表示。 双核就是指CPU上集成了两个运算核心。
3.存储器(内存):存储器是计算机中存放所有数据和程序的记忆部件,它的基本功能是指按照指定的地址存入或者读取信息 内存储器,简称内存,CPU可以直接访问其里的数据 。分类:(在下面关于内存中会讲到)
a.只读存储器(ROM)
b.随机存储器(RAM)
c.高速缓冲存储器CACHE(外存)
4. 输入设备:向计算机输入命令、程序、数据等信息,把这些信息转换为计算机能识别的二进制代码。如:键盘,鼠标,扫描仪,手写板,照相机,等等
5. 输出设备:将计算机处理后的各种内部格式信息转换为人们能识别的形式表达出来。 如:显示器,打印机,绘图仪,音响等等。

二.关于主板(早期)

由于主板是连接各组件的一个重要部分,因此在主板上****连接各部分组件的芯片组,其设计优劣,就会影响性能。早期的芯片组通常分为两个网桥来控制各组件的通信,分别是:
(1)北桥,负责连接速度较快的CPU、内存与显卡等组件
(2) 南桥,负责连接速度较慢的设备接口,包括硬盘、USB设备、网卡等。
不过由于北桥最重要的就是CPU与内存之间的桥接。因此在目前的主流架构中,大多将北桥的内存控制器整合到了CPU当中,所以你只会看到CPU而没有看到以往的北桥芯片。

早期芯片组分南北桥,北桥可以连接CPU、内存与显卡。只是如果CPU有读写到内存的操作,还需要北桥的支持,也就是CPU与内存的交流,会消耗掉北桥的总可用带宽。因此目前将内存控制器整合到CPU后,CPU与内存之间的通信是直接交流,速度较快之外,也不会消耗更多的带宽。

三.关于CPU

cpu为一个具有特定功能芯片,里面含有指令集。由于cpu的工作主要是管理与运算,因此cpu内又可分为两个主要的单元:算术逻辑单元(负责程序运算与逻辑判断)和控制单元(协调各周边组件与各单元间的工作)。
cpu中的要被运算与判断的数据从哪里来的?
答:cpu读取的数据都是从内存来的,内存的数据则是从输入单元所传输进来的,而cpu处理完毕的数据须要先写回内存,最后数据才从内存传输到输出单元。

单核和多核:

单核:仅有一个运算单元
多核:在一块CPU封装当中嵌入了两个以上的运算内核,简单的说,就是一个物理的CPU外壳中,含有两个以上的CPU单元

cpu的工作频率:外频和倍频

前端总线(FSB)引入:
早期的CPL架构主要通过北桥来连接系统最重要的CPU,内存与显卡。因为所有的设备都得通过北桥来连接,因此每个设备的工作频率应该要相同。于是就产生了前端总线这个东西。
外频和倍频引入:
但因为CPU的命令周期比其他的设备都要快,又为了要满足FSB的频率,因此厂商就在CPU内部再进行加速,于是就有了所谓的外频与倍频。
总结来说:在早期的CPU设计中,所谓的外频指的是CPU与外部组件进行数据传输时的速度。
倍频:cpu内部用来加速工作性能的一个倍数。
两者乘积才是cpu的频率速度。

现代CPU:

但如此一来所有的数据都被北桥卡死了,北桥又不可能比CPU更快,因此这家伙常常是系统性能的瓶颈。为了解决这个问题,新的CPU设计中,已经将内存控制器整合到了CPU内部,而连接CPU与内存、显卡的控制器的设计,Intel 使用QPI ( Quick Path Interconnect)与DMI技术,而AMD则使用了Hyper Transport 技术,这些技术都可以让CPU直接与内存、显卡等设备分别进行通信,而不需要通过外部的连接芯片。

因为现在没有所谓的北桥(已整合到CPU内),因此,CPU的频率设计就无须考虑要同步的外频,只需要考虑整体的频率即可。所以,如果你经常有查看自己CPU频率的习惯,当使用cpu-z这个软件时,应该会很惊讶地发现,怎么外频变成100MHz而倍频可以到达30以上,相当有趣。

cpu的二级高速缓存

我们现在知道cpu的数据都是由内存提供,但cpu到内存之间还是得通过内存控制器。如果某些很常用的程序或数据可以放置到cpu内部的话(也就是二级缓存),那么cpu数据的读取就不需要跑到内存重新读取。

CPU架构

我们使用的软件都要经过CPU内部的指令集来完成。而这些指令集的设计由主要分为两种设计理念,这就是目前世界上最常见的两种CPU架构:
精简指令集(RISC),复杂指令集 (CISC)系统
1.
精简指令集:这种CPU的设计中,指令集较为精简,每个指令的运行时间都很短,完成的操作也很简单,指令的执行性能较佳:但是若要做复杂的事情,就要由多个指令来完成。常见的RISC指令集CPU主要有甲骨文(Oracle )公司的SPARC系列、IBM 公司的Power Arhitecture (包括PowerPC]系列与ARM公司( ARM Holdings)的ARM CPU系列等。
在应用方面,SPARC CPU的电脑常用于学术领域的大型工作站中,包括银行金融体系的主服务器也都有这类的电脑架构;至于PowerPC架构的应用上,例如Sony公司出产的Play Station3(PS3 )就是使用PowerPC架构的Cell处理器;那ARM公司的ARM呢?你常使用的各品牌手机、PDA、导航系统、网络设备(交换机、路由器)等,几乎都是使用ARM架构的CPU。老实说,目前世界上使用范围最广的CPU可能就是ARM这种架构。
2.
与RISC不同的是,CISC在指令集的每个小指令可以执行一些较低级的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。因为指令执行较为复杂,所以每条指令花费的时间较长,但每个伏单条指令可以处理的工作较为丰富。常见的使用CISC指令集的CPU有AMD、Intel. VIA等x86架构的CPU。

由于AMD、Intel. VIA所开发出来的x86架构CPU被大量使用于个人电脑(Personal Computer ),因此,个人电脑常被称为x86架构电脑。

x86架构的由来

这是因为最早的那块Intel研发出来的CPU代号称为8086,后来依此架构又开发出80286、80386等,因此这种架构的CPU就被称为x86架构了。
在20年以前由nel所开发的x86架构CPU由8位升级到16、32位,后来AMD依此架构修改新代的CPU为64位, 为了区别两者的差异,因此64位的个人电脑CPU又被统称为x86-6架构

不同的x86架构的CPU有什么差异呢?

除了CPU的整体结构(如二级缓存、命令执行周期数等)之外,主要是在于指令集的不同。新的x86的CPU大多含有很先进的指令集,这些指令集可以加速多媒体程序的运行,也能够增强虚拟化的性能,而且某些指令集更能够增加能源利用效率,让CPU耗电量降低。由于电费越来越高,购买电脑时,除了整体的性能之外,节能省电的CPU也可以考虑。

64位的位是什么意思?

所谓的位(bi),指的是CPU一次读取数据的最大量。64位CPU代表CPU一次可以读写64位的数据, 32位CPU则是CPU一次能读取32位的意思。 因为CPU读取数据量有因此能够从内存中读写的数据也就有所限制, 所以,一般32位的 CPU所能读写的最大数据量,大概就是4GB.(一共32位,一个位上有两种状态1或0,所以2的32次方算出来是多少bit,然后连乘3个1024换算成GB,就是4GB)

为什么内存不足时,系统性能就很糟糕?

cpu读取的数据都是从内存来的,内存的数据则是从输入单元所传输进来的,而cpu处理完毕的数据须要先写回内存,最后数据才从内存传输到输出单元。
所以基本上数据都是通过内存再流出去的。至于数据会流进/流出内存则是由cpu所发出的命令控制。而cpu实际要处理的数据则完全来自于内存。

四.关于内存

1.DRAM(动态随机存储内存或挥发性内存)

个人电脑的内存主要组件为动态随机存储内存,随机读写内存只有在通电时才能记录和使用,断电后数据就会消失。
在这里插入图片描述

2.SRAM

我们现在知道cpu的数据都是由内存提供,但cpu到内存之间还是得通过内存控制器。如果某些很常用的程序或数据可以放置到cpu内部的话(也就是二级缓存),那么cpu数据的读取就不需要跑到内存重新读取。
因为二级缓存整合到cpu内部,因此二级缓存的速度必须要与cpu频率相同。使用DRAM肯定是无法达到这个频率速度的,此时就需要静态随机存储内存(SRAM)。

3.只读存储器(ROM)

1.CMOS的引入

主板上面的组件是非常多的,而每个组件的参数又具有可调整性。举例来说:cpu与内存的频率是可调整的。而主板上面如果有内置的网卡或显卡时,该功能是否要启动与该功能的各项参数,是被记录到主板上面的一个称为CMOS的芯片中,这个芯片需要借着额外的电源来使用记录的功能,这也就是为什么你的主板上面会有一块纽扣电池的缘故。

2.固件和BIOS的引入

固件就是固定在硬件上面的软件,很多硬件 上面都会有固件,例如乌哥常用的磁盘阵列卡。10G的网卡。交换机等
固件像软件一样也是一一个被电脑所执行的程序,然而它是对于硬件内部而言更加重要的部分。
例如BIOS就是一个固件,BIOS虽然对于我们日常操作电脑系统没有什么太大的关系,但是它机控制着启动时各项硬件参数的获取。所以我们会知道很多的硬件上面都会有ROM来存储固件。
BIOS对电脑系统来讲是非常重要的,因为它掌握了系统硬件的详细信息与启动设备的选择等。但是电脑发展的速度太快了,因此BIOS程序代码也可能需要作适度的修改才行,所以你才会在很多主板官网找到BIOS的更新程序。但是BIOS原本使用的是无法改写的ROM.因此根本无法修改BIOS程序代码。而现在的BIOS通常是写入类似闪存( fiash )或EEPROM’2131存储硬件中。
3.ROM
那么类似于BIOS这样的固件是如何存储的,它就是通过ROM(只读存储器)存储的。它是主板上面的一个存储芯片,在没有通电时也能记录数据。

五.有关进制

十六进制常见于内存地址,注册表regedit,MAC地址等而八进制比较少见不常有用,一般用于某些编程语言。
比特(bit):对于计算机而言,它只认识0与1,0/1这个二进制单位我们称为bit
字节(byte)😗*8个比特为一个字节。****因为计算机的最小存储单位为8个比特即一个字节。**比比特大的单位还有K,M,G,T,P等单位。他们之间换算都是1024.

六.数制的概念

数的表示规则,通常按进位原则进行计数,称为进位计数数制。人们通常采用的数制有十进制、二进制、八进制和十六进制。数制的表示主要包括三个基本要素:数码、基数和位权。
数码:是指数制中表示基本数值大小的不同数字符号
基数:是指数制所使用的数码的个数,如R机制表示有R个基本符号,其基数就为 R
位权:
在这里插入图片描述

七.不同数制之间的转换

八.速度单位

CPU的命令周期常使用MHz或是GHz之类的单位,这个Hz其实就是“次数/秒”的意思而在网络传输方面,由于网络使用的是位(bit)为单位,因此网络常使用的单位为Mbit/s 是Mbits per second,亦即是每秒多少Mbit.
举例来说, 大家常听到的“20M/5M"光纤传输速度,如果转成数据
容量的字节时,其实理论最大传输值为:每秒2.5MB/每秒625KB的下载或上传速度。

九.内存寻址概念和直接寻址技术

内存作为1个存储数据的存在, 有1个很重要的特性, 就是内存里的数据能被cpu直接访问。
cpu能不能直接访问硬盘的数据?答案是不能。 只能通过把硬盘的数据先放到内存里,然后再从内存里访问硬盘的数据。我们平时玩游戏碰上读图loading 进度条的这个过程, 就是把数据从硬盘读到内存的过程啊。读完条后地图的数据就在内存中了。
所以内存才是计算机系统的主存储器, 而硬盘是被分到跟光盘…u盘一类都是外部存储器。
内存地址:
内存其实为一个一个的小格子,一个小格子为一个比特,但是遍历的话只能一个一个最小存储单位遍历,也就是一个字节,每一个字节有一个内存地址。由于遍历比较浪费时间,所以cpu就根据地址去寻找所需要的的东西。
内存地址的表示方式:
由一个二进制数字表示,如果地址加一,那么这个地址就对应下一个字节。
内存地址的长度
如果一个电脑是32位的,那么内存地址就是32位的二进制数在32位操作系统中, 内存的地址就是32位的2进制数,那么假如32位系统的某个内存地址是: 0000 1111 1111 0000 1111 0000 1111 0000 那么它可以用十六进制表示成: 0 F F 0 F 0 F 0
也就是 Ox0ff0f0f0,前面Ox代表十六进制,它实际上是1个二进制的数字啊. 不过计算机里面所有的东西都是二进制。
内存地址的数量决定cpu能访问的内存大小:
上面说了, 既然32位系统里内存地址长度是32位的. 所以32位的地址范围就是从 0000 0000 0000 0000 0000 0000 0000 0000 到 1111 1111 1111 1111 1111 1111 1111 1111 (Ox00000000 ~ OxFFFFFFFF), 这里有几个地址? 明显是有 2^32 个. 那么2^32是多少个? 2^32 = 4 * 1024(G) * 1024(M) * 1024(K) = 4294967296 , 就是4G ,而每1个地址对应1个1个字节, 容量就是1byte, 所以2^32个地址就总共能对应应4GB 的内存容量, 这里的B指的是byte 字节。
假如你给32位的系统配上了8GB的内存, 操作系统最多也只能给其中4GB 分配地址,其余 4GB是没有地址, 因为地址不够用,所以32位系统最多支持4GB内存就是这样的。 那么64位系统呢, 对应地, 64位系统的内存地址是64位的二进制数,0000 …64个0 ~ 1111 …64个1, 用十六进表示就是从Ox0000000000000000 ~ OxFFFFFFFFFFFFFFFF , 每个地址的长度比32位的长度多1倍! 而64位系统总共有多少个地址?
2^64 = 2^34 * 2^10(G) * 2^10(M) * 2^10(K) 也就是17179869184 G(4G × 4G)个地址,也就是说理论上64位系统配上64位cpu理论上支持17多亿GB的内存, 当然这个只是理论, 实际上现在的普通电脑主板能支持16GB都不错了。
直接寻址技术:
直接寻址技术已经成为当代计算机软硬件的标准技术之一, 也就是说只要cpu知道要访问数据的内存地址, 就能直接到内存的对应位置去访问数据。

十.关于指针

指针是用来存放内存地址的, 那么对于32位系统来讲, 内存地址是1个32位长度的2进制数, 而每1 个内存单位长度只有1byte = 8bit(位), 所以1个指针 就需要4byte的内存来存放该指针的内容(1个内存地址) 。所以 我们定义1个指针 int *p; 然后求sizeof§ 是返回4的, 4字节。而对于64位系统来讲, 内存地址是64位的2进制数, 所以sizof§就返回8了, 共需要8个内存单位去存放 64位系统的1个指针!

十一.linux系统结构

在这里插入图片描述

1.为什么要引入操作系统?

在早期想要让电脑执行程序就得要参考堆硬件功能函数, 并且学习机器语言才能够编写程序。同时每次写程序时都必须要重新改写,因为硬件与软件功能不见得都致之故。
如果其能够将所有的硬件都驱动,并且提供一个软件的参考接口(API)来给工程师开发软件的话,那开发软件不就变得非常的简单了吗这就是操作系统。操作系统=内核+提供接口
操作系统(Operating System, OS) 其实也是一组程序,这组程序的重点就是
管理电脑上的所有活动(比如没有操作系统的话,当你将运行的数据写入内存时,你就得自行分配一个内存区块出来让自己的数据能够填上去,所以你还得了解内存的地址是如何定位的)以及驱动程序中的所有硬件

操作系统功能:(通过内核实现)

让CPU可以开始判断逻辑与运算 数值、让内存可以开始加载/读出数据 与程序代码、让硬盘可以开始被读取,让网卡可以开始传输数据,让所有的外置设备可以开始运转等等
所以只要硬件不同,内核就得进行修改
总之,硬件的所有操作都必须通过操作系统。

2.引入系统调用

既然硬件都是由内核管理的,那么如果我想要开发软件的话,自然就得要大参考这个内核的相关功能。如此一来不是从原本的参考硬件函数变成参考内核功能,还是很麻烦,有没有简单的方法?为了解决这个问题,操作系统通常会提供套应用程序编程入口(API)来供程序员来开发软件,工程师只要遵守该API那就很容易开发软件了。比如:学习c语言就只要参考c语言函数就行了,不需要再去考虑其他内核的相关功能,因为内核的系统调用接口会主动的将c语言的相关语法转成内核可以了解的任务函数
总结:系统调用层可以保护内核并且让程序员更容易开发软件。程序员只要遵守公认的系统调用参数就可以。

3.操作系统总结

1.操作系统的内核层直接参考硬件规格写成,所以同一个操作系统程序不能够在不一 样的硬件架构下运行。举例来说,Windows 8.1不能直接在ARM架构(手机与平板设备)的电脑中运行。

2.操作系统只是管理整个硬件资源,包括CPU、内存、输入输出设备及文件系统等。如果没有其他的应用程序辅助,操作系统只能让电脑主机准备妥当( Ready)而已,无法运行其他功能。所以你现在知道为何Windows. 上 面要完成图像的处理还需要类似Photolmpact 或Photoshop之类的软件了吧?

3.应用程序的开发都是参考操作系统提供的API,所以该应用程序只能在该操作系统上面运行而已,不可以在其他操作系统上运行。现在您知道为何去购买游戏光盘时,光盘上面会明明白白写着该软件适用于哪一种操作系统?也该知道某些游戏为什么不能够在Linux 上面安装了吧?

4.内核功能

系统调用接口(System call interface)

刚刚谈过,这是为了方便程序员可以轻易地通过与内核的沟通,将硬件的资源进一步地利用,于是需要有这个简易的接口来方便程序员使用。

进程管理(Process control)

总有听过所谓的多任务环境吧?一台电脑可能同时有很多的任务跑到CPU等待运算处理,内核这个时候必须要能够控制这些任务,让CPU的资源作有效的分配才行。另外,良好的CPU调度机制(就是CPU先运行哪个工作的排列顺序)将会有效地加快整体系统性能。

内存管理(Memory management)

控制整个系统的内存管理,内存控制非常重要,因为系统所有的程序代码与数据都必须要先存放在内存当中。通常内核会提供虚拟内存的功能,当内存不足时可以提供交换分区( swap )的功能。

文件系统管理
例如数据的输入与输出(1/O)等工作,还有不同文件格式的支持等。如果你的内核不支持某个文件系统,那么您将无法使用该格式的文件。例如: Windows 98就不支持NTFS文件格式的硬盘。

设备驱动 (Device drivers)
就如同上面提到的,硬件的管理是内核的主要工作之一,当然,设备的驱动程序就是内核需要做的事情。好在目前都有所谓的可加载模块功能,可以将驱动程序编译成模块,就不需要重新的编译内核,这个也会在后续的第19章当中提到。

在这里插入图片描述

十二.修改用户提示符

在这里插入图片描述
PS1为变量名,这个变量控制着用户提示符dalao@LocaLhost,\u控制着dalao,\h控制着主机名localhost,\w控制着~
1.修改变量(临时,一退出就没有了)
在这里插入图片描述
2.永久修改变量
ls 查看当前目录下的文件 ls -a查看当前目录下的所有文件
在这里插入图片描述
例如.bash_logout前面的.表示隐藏文件,所以ls看不到,ls -a可以看到。在这里插入图片描述
之后用vim .bashrc打开.bashrc文件。在此文件里加入PS1变量,然后保存,退出,更新文件(:–>wq–>source .bashrc)即可完成。
3.使用语句进行控制变量
即在/etc/profile文件中写入语句(**此处涉及文件开机运行环境变量文件加载顺序:/etc/profile → /etc/profile.d/*.sh → ~/.bash_profile → ~/.bashrc → [/etc/bashrc])**注:这里为什么不和上面一样将PS1写到~/.bashrc文件中,是因为这里的 ~ 表示当前用户的家目录,所以如果继续写道~/.bashrc文件中,那么这个文件只在该用户登陆的时候加载,其他用户登陆的时候不会去加载,所以这里我们需要将变量PS1写入到一个所有用户都会去读取到的一个文件中,就是/etc/profile这个文件了。
在这里插入图片描述

十三.系统总线和输入输出(i/o)总线

新的cpu设计中,已经将北桥的内存控制芯片整合到cpu内,而cpu与内存,显卡通信的总线通常称为系统总线。南桥就是所谓的输入输出(i/o)总线,主要在连接硬盘,usb,网卡等设备

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值