2.1.3 如何用Go模拟CPU本人摄于哈佛计算机学院 计算机的演化历史 • 因为改纸带比较麻烦 • 冯诺伊曼架构 • 又称存储程序型计算机 • 可在运行时改变指令 • 指令控制指令和数据 计算机的演化历史 • 因为改纸带比较麻烦 • 冯诺伊曼架构 • 又称存储程序型计算机 • 可在运行时改变指令 • 指令控制指令和数据 • 用啥实现他老人家可没说 本人摄于MIT CSAI Lab 计算机的演化历史 • 冯诺伊曼架构 草稿纸 抽象多且环环嵌套 • 硬件过于复杂 • 软件基于操作系统等复杂概念 • 真的快且便宜 Go模拟CPU • 如何用Go实现冯诺伊曼架构CPU? • 简单:一个循环+一个大数组 读取当前指令 执行指令 下一条指令 模拟目标 – MOS 6502 • 诞生于1975年 • MOS 6502应用范围广 • 资料多且易获得 • 简单、容易实现的现代CPU MOS 6502简介 • 8位,变长ISA(CISC) – 0x1FF 0x1FF – 0xFFF9 0xFFFA Go模拟6502控制单元 • 读取当前指令:16位PC寄存器 • 执行指令 • 指令译码器(读出来的指令是什么) • 指令执行器(按指令执行) • 6502支持NOP指令(啥都不做) Go模拟6502控制单元 • 指令结构(instruction) • 操作码(valid opcode) • 寻址模式 (address mode)0 码力 | 42 页 | 7.10 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a一个操作可能从一个硬件设备读取、或者向一个硬件 设备写入一些数据,从而完成一个特定的任务。 对于现代计算机来说,最基本 的操作是底层计算机指令,比如CPU和GPU指令。 常见的硬件设备包括内存、 磁盘、网卡、显卡,显示器、键盘和鼠标等。 直接操控底层计算机指令进行编程是非常繁琐和容易出错的。 高级编程语言通 过对底层指令进行一些封装和对数据进行一些抽象,从而使得编程变得直观和 易于理解。 在流行高级编程语言中,一个操作通常是 很多现代高级语言使用包(package)来组织代码。 一个包必须引入(import) 另一个包才能使用另一个包中的公有(导出的)代码要素。 包名和包的引入名 也都必须是标识符。 尽管高级编程语言代码比底层机器指令友好和易懂,我们还是需要一些注释来 帮助自己和其他程序员理解我们所写的代码。 在下一节的程序示例中,我们可 以看到很多注释。 一个简单的Go示例程序 为了对各种代码元素有一个更清楚的认识,让我们来看一个简短的Go示例程 非全面地对这 些特性进行介绍,后面的其它文章会陆续补全本文的未介绍的内容。 协程(goroutine) 现代CPU一般含有多个核,并且一个核可能支持多线程。换句话说,现代CPU 可以同时执行多条指令流水线。 为了将CPU的能力发挥到极致,我们常常需要 使我们的程序支持并发(concurrent)计算。 并发计算是指若干计算可能在某些时间片段内同时运行的情形。 下面这两张图 描绘了两种并发计算的场景。在此图中,A和B表示两个计算。0 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a一个操作可能从一个硬件设备读取、或者向一个硬 件设备写入一些数据,从而完成一个特定的任务。 对于现代计算机来说,最 基本的操作是底层计算机指令,比如CPU和GPU指令。 常见的硬件设备包括 内存、磁盘、网卡、显卡,显示器、键盘和鼠标等。 直接操控底层计算机指令进行编程是非常繁琐和容易出错的。 高级编程语言 通过对底层指令进行一些封装和对数据进行一些抽象,从而使得编程变得直观 和易于理解。 在流行高级编程语言中,一个操作通常 很多现代高级语言使用包(package)来组织代码。 一个包必须引入 (import)另一个包才能使用另一个包中的公有(导出的)代码要素。 包名和 包的引入名也都必须是标识符。 尽管高级编程语言代码比底层机器指令友好和易懂,我们还是需要一些注释来 帮助自己和其他程序员理解我们所写的代码。 在下一节的程序示例中,我们 可以看到很多注释。 一个简单的Go示例程序 为了对各种代码元素有一个更清楚的认识,让我们来看一个简短的Go示例程 全面地 对这些特性进行介绍,后面的其它文章会陆续补全本文的未介绍的内容。 协程(goroutine) 现代CPU一般含有多个核,并且一个核可能支持多线程。换句话说,现代CPU 可以同时执行多条指令流水线。 为了将CPU的能力发挥到极致,我们常常需 要使我们的程序支持并发(concurrent)计算。 并发计算是指若干计算可能在某些时间片段内同时运行的情形。 下面这两张 图描绘了两种并发计算的场景。在此图中,A和B表示两个计算。0 码力 | 821 页 | 956.82 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a一个操作可能从一个硬件设备读取、或者向一个硬件设备写入 一些数据,从而完成一个特定的任务。 对于现代计算机来说,最基本的操作是底层 计算机指令,比如CPU和GPU指令。 常见的硬件设备包括内存、磁盘、网卡、显卡, 显示器、键盘和鼠标等。 直接操控底层计算机指令进行编程是非常繁琐和容易出错的。 高级编程语言通过对 底层指令进行一些封装和对数据进行一些抽象,从而使得编程变得直观和易于理 解。 在流行高级编程语言中,一个操作通常是 一个包必须引入(import)另 一个包才能使用另一个包中的公有(导出的)代码要素。 包名和包的引入名也都必 第4章:程序源代码基本元素介绍 16 须是标识符。 尽管高级编程语言代码比底层机器指令友好和易懂,我们还是需要一些注释来帮助 自己和其他程序员理解我们所写的代码。 在下一节的程序示例中,我们可以看到很 多注释。 一个简单的Go示例程序 为了对各种代码元素有一个更清楚的认识,让我们来看一个简短的Go示例程序。 面地对这些特性进 行介绍,后面的其它文章会陆续补全本文的未介绍的内容。 协程(goroutine) 现代CPU一般含有多个核,并且一个核可能支持多线程。换句话说,现代CPU可以同 时执行多条指令流水线。 为了将CPU的能力发挥到极致,我们常常需要使我们的程 序支持并发(concurrent)计算。 并发计算是指若干计算可能在某些时间片段内同时运行的情形。 下面这两张图描绘 了两种并发计算的场景。在此图中,A和B表示两个计算。0 码力 | 591 页 | 21.40 MB | 1 年前3
Go 入门指南(The way to Go)Ken Thompson 先前在 Plan 9 操作系统上使用的 C 工具链。 Go 语言的编译器和链接器都是使用 C 语言编写并产生本地代码,Go 不存在自我引导之类的功能。因 此如果使用一个有不同指令集的编译器来构建 Go 程序,就需要针对操作系统和处理器架构(32 位操 Go入门指南 - 12 - 本文档使用 看云 构建 作系统或 64 位操作系统)进行区别对待。 这款编译器使用非分代 unsafe 包中的代码 -w 打印归类后的语法解析树 -x 打印 lex tokens 从 Go 1.0.3 版本开始,不再使用 8g,8l 之类的指令进行程序的构建,取而代之的是统一的 go build 和 go install 等命令,而这些指令会自动调用相关的编译器或链接器。 如果你想获得更深层次的信息,你可以在目录 $GOROOT/src/cmd 下找到编译器和链接器的源代 Go入门指南 构建 在完成这些设置后,你需要在终端输入指令 source .bashrc 以使这些环境变量生效。然后重启终 端,输入 go env 和 env 来检查环境变量是否设置正确。 2. 安装 C 工具 Go 的工具链是用 C 语言编写的,因此在安装 Go 之前你需要先安装相关的 C 工具。如果你使用的是 Ubuntu 的话,你可以在终端输入以下指令( 译者注:由于网络环境的特殊性,你可能需要将每个工0 码力 | 380 页 | 2.97 MB | 1 年前3
1.3 七牛如何做HTTP服务测试 … body ret 指令 • ret – 发起 http Request 请求,并将 http Response 存储到 $(resp) 变量中 • ret product 环境共享测试案例? – 测试环境参数化 – 也方便测试脚本入库(不入库 User/Password、AK/SK 这种敏感 信息) host 指令 • 服务地址参数化 host foo.com 127.0.0.1:8888 get http://foo.com/objects/a325gea2kgfd com/objects/$(id1) auth qiniutest ret 200 json '{"a": "hello1", "b": 2}' env、envdecode 指令 • env – 取环境变量 对应的值 • decode – 将一个 json 字符串 decode 0 码力 | 27 页 | 422.11 KB | 1 年前3
Go 入门指南(The way to Go)Ken Thompson 先前在 Plan 9 操作系统上使用的 C 工具链。 Go 语言的编译器和链接器都是使用 C 语言编写并产生本地代码,Go 不存在自我引导之类的功能。因此如果 使用一个有不同指令集的编译器来构建 Go 程序,就需要针对操作系统和处理器架构(32 位操作系统或 64 位操作系统)进行区别对待。 这款编译器使用非分代、无压缩和并行的方式进行编译,它的编译速度要比 gccgo -w 打印归类后的语法解析树 12. -x 打印 lex tokens 从 Go 1.0.3 版本开始,不再使用 8g,8l 之类的指令进行程序的构建,取而代之的是统一的 go build 和 go install 等命令,而这些指令会自动调用相关的编译器或链接器。 如果你想获得更深层次的信息,你可以在目录 $GOROOT/src/cmd 下找到编译器和链接器的源代码。Go 在完成这些设置后,你需要在终端输入指令 source .bashrc 以使这些环境变量生效。然后重启终端,输入 go env 和 env 来检查环境变量是否设置正确。 2. 安装 C 工具 Go 的工具链是用 C 语言编写的,因此在安装 Go 之前你需要先安装相关的 C 工具。如果你使用的是 Ubuntu 的话,你可以在终端输入以下指令( 译者注:由于网络环境的特殊性,你可能需要将每个工具分开安0 码力 | 466 页 | 4.44 MB | 1 年前3
Hello 算法 1.0.0b1 Golang版Figure 1‑1. 查字典步骤 查字典这个小学生的标配技能,实际上就是大名鼎鼎的「二分查找」。从数据结构角度,我们可以将字典看作 是一个已排序的「数组」;而从算法角度,我们可将上述查字典的一系列指令看作是「二分查找」算法。 小到烹饪一道菜、大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现,使我们可以通过编程将 数据结构存储在内存中,也可以编写代码来调用 CPU, GPU 执行算法,从而将生活中的问题搬运到计算机中, 了!因为这正是本书存在的价值,接下来,本书将会一步步地引导你进入数据结构与算法的知 识殿堂。 1.2. 算法是什么 1.2.1. 算法定义 「算法 Algorithm」是在有限时间内解决特定问题的一组指令或操作步骤。算法具有以下特性: ‧ 问题是明确的,需要拥有明确的输入和输出定义。 ‧ 解具有确定性,即给定相同输入时,输出一定相同。 ‧ 具有可行性,可在有限步骤、有限时间、有限内存空间下完成。 算法在生活中随处可见,并不高深莫测。我们已经不知不觉地学习到许多“算法”,用于解决生活中大大 小小的问题。 ‧“查字典”的原理和二分查找算法一致。二分体现分而治之的重要算法思想。 ‧ 算法是在有限时间内解决特定问题的一组指令或操作步骤,数据结构是在计算机中组织与存储数据的方 式。 ‧ 数据结构与算法两者紧密联系。数据结构是算法的底座,算法是发挥数据结构的舞台。 ‧ 乐高积木对应数据,积木形状和连接形式对应数据结构,拼装积木的流程步骤对应算法。0 码力 | 190 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b2 Golang版Figure 1‑1. 查字典步骤 查字典这个小学生的标配技能,实际上就是大名鼎鼎的「二分查找」。从数据结构角度,我们可以将字典看作 是一个已排序的「数组」;而从算法角度,我们可将上述查字典的一系列指令看作是「二分查找」算法。 小到烹饪一道菜、大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现,使我们可以通过编程将 数据结构存储在内存中,也可以编写代码来调用 CPU, GPU 执行算法,从而将生活中的问题搬运到计算机中, 了!因为这正是本书存在的价值,接下来,本书将会一步步地引导你进入数据结构与算法的知 识殿堂。 1.2. 算法是什么 1.2.1. 算法定义 「算法 Algorithm」是在有限时间内解决特定问题的一组指令或操作步骤。算法具有以下特性: ‧ 问题是明确的,需要拥有明确的输入和输出定义。 ‧ 解具有确定性,即给定相同输入时,输出一定相同。 ‧ 具有可行性,可在有限步骤、有限时间、有限内存空间下完成。 算法在生活中随处可见,并不高深莫测。我们已经不知不觉地学习到许多“算法”,用于解决生活中大大 小小的问题。 ‧“查字典”的原理和二分查找算法一致。二分体现分而治之的重要算法思想。 ‧ 算法是在有限时间内解决特定问题的一组指令或操作步骤,数据结构是在计算机中组织与存储数据的方 式。 ‧ 数据结构与算法两者紧密联系。数据结构是算法的底座,算法是发挥数据结构的舞台。 ‧ 乐高积木对应数据,积木形状和连接形式对应数据结构,拼装积木的流程步骤对应算法。0 码力 | 202 页 | 15.73 MB | 1 年前3
Golang 入门笔记当一个文件需要使用其他函数或者变量的时候,需要先引入对饮的包名 1. 引入方式 import "包名" 2. 引入放方式: import ( "包名" "包名" ) 3. package 指令在文件的第一行,然后是 import 指令 4. 在 import 包时, 路径从 $GOPATH 的 src 开始,不用带 src , 编译器会自动从 src 开始引入 5. 为了让其他包的文件,额可以访问到本包的函数,0 码力 | 2 页 | 511.29 KB | 1 年前3
共 23 条
- 1
- 2
- 3













