【随记】架构与指令集区分
计算机越往底层学习,让我意识到理清计算机历史脉络的重要性,这也是任何一门技术相关教材第一章存在的意义
TCP/IP与Linux
学习盛延敏老师网络编程课之前,我压根不会把这两者联系在一起。而具体到互联网技术里,有两件事最为重要,一个是 TCP/IP 协议,它是万物互联的事实标准;另一个是 Linux 操作系统,它是推动互联网技术走向繁荣的基石。
互联网通信协议从最初阿帕网(ARPANET)NCP协议到OSI七层再到TCP/IP五层协议栈,TCP/IP五层协议能发展至今离不开UNIX的发展,放一张WIKI上UNIX和类UNIX系统演化图:
了解后我才知道原来MacOS(商用)和Linux(完全开源)是UNIX(闭源)的两个变种,内核设计理念虽然一样但是在开发中根本不是一个模式,尤其内核接口调用方面。
浅浅提一下,POSIX和GNU这些概念大家都听说过吧,我理解POSIX(Portable Operating System Interface for Computing Systems)是一套描述操作系统调用内核服务的接口规范,因为UNIX是闭源系统,有着一套标准所有的类UNIX系统都可以按照这一规范去开发。而GNU(GNU’s NOT UNIX)我理解是一套基于Linux的软件系统,比如我们常用的GCC编译器 、Bash Shell等等。
回到主题,最初七层OSI网络协议没有流行很大是没有搭上UNIX发展的快车,停留在了理论层面,而TCP/IP协议最早在1983 年4.2BSD系统中就已经完成网络编程套接口相关的设计和实现。
指令集、架构
关于CPU、指令集、架构、芯片的一些科普非常透彻的解释了两者关系。
指令集(Instruction Set Architecture):我理解就是一套规范,我想称它为字典,它约定了我们编译器将按照它的约定,转换为CPU识别的二进制指令。
最常见的ARM指令集与X86指令集(X86-64为其扩展,所以向下兼容),一般在我概念中ARM属于精简指令集,而PC端X86属于复杂指令集,前者在嵌入式设备中应用广泛,功耗低,而后者性能更强一些。但是随着微架构技术的发展,这两者已经没有太大区别。苹果M系列电脑之后就统一使用了ARM指令集(终于获得了ARM公司授权)。
在嵌入式开发中经常用到的交叉编译工具链,其实现跨平台编译符合指定平台指令集的二进制文件。
微架构(microarchitecture):准确来说是微架构,它使指令集在CPU硬件电路得以实现,我们常常谈到的纳米制程,说的就是它。
就拿iphone15pro来说,其芯片WIKI官网介绍是这样的:
The Apple A17 Pro is a 64-bit ARM-based system on a chip (SoC) designed by Apple Inc., part of the Apple silicon series, and manufactured by TSMC.[5] It is used in the iPhone 15 Pro and iPhone 15 Pro Max models only[2][6] and is the first widely available SoC to be built on a 3 nm process.[7][8]
可以清晰的看出这款芯片采用ARM-64位指令集,苹果自研,巴拉巴拉。。。
架构首次采用3nm制程等等。
计算机编码
https://www.cnblogs.com/lanhaicode/p/11214827.html
https://dnowba.blogspot.com/2012/07/ansiunicodeutf-8utf-16bom.html
看我这两篇文章让我恍然大悟,写的真的太好了,大道至简的感觉。
简单谈一下我的感受,ASCII、ANSI、Unicode、UTF-8、UTF-16这些名词经常见到,看起来五花八门的其实在实际中,我认为你只要知道GBK是中国区Windows编码,ASCII是美国Windows编码,二者都属于ANSI编码。
Unicode又叫万国码,属于一套字符集,那这套字符集对应的编码在计算机中有UTF-8、UTF-16、UTF-32三套编码方案,区别在于编码空间不一样,具体规则在上面文章中有介绍。
# 查看Linux编码方式
locale
# 语言和地区代码(en_US)以及字符编码(UTF-8)
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"