開放電腦計劃 報告人:陳鍾誠 2011 年 8 月 20 日 台灣開源人年會 COSCUP 2011 – 中研院

Slides:



Advertisements
Similar presentations
第 3 章操作系统基础 3.1 操作系统概述 3.2 操作系统的功能模块 3.3 典型操作系统概述.
Advertisements

廣告寫作 授課教師: 呂立德. 一、何謂廣告?廣告寫作的特色為何? 從有人類社會開始,廣告便與人類活動息息相關。 廣義而言,廣告是語言文字和圖像的結合,也可定義為 :在一定的時空規範下,以銷售為主要目的的宣傳活動 。其主要功能和作用,一方面在提供訊息使對象 ( 群 ) 方 便理解或記憶;另方面更是為了引發注意和興趣,進而.
计算机组成原理.
102學年度 多元入學 大 學.
C與C++ C++語言具有物件導向的功能,易於開發、撰寫與偵錯,成為重要系統的開發工具之一。
第1单元 操作系统概论 第一节 绪论 操作系统定义.
建構 Beta電腦 – Fall /29/0.
《富爸爸,窮爸爸》 指導老師:林容萱 老師 學生: 陳怡蓉 歐佩宜 林世文.
第一章 C语言概述 计算机公共教学部.
计算机组成原理 北京理工大学计算机科学工程系 赵清杰 北京理工大学计算机科学工程系.
计算机体系结构 应用程序 软件 操作系统 编译器 固件 指令集 输入输出 CPU 硬件 内存 (I/O) 集成电路 元件,逻辑门.
第六章 中央处理器 中央处理器,简称CPU,是整个计算机的核心,它包括运算器和控制器。
第10章 DOS功能调用与BIOS中断调用.
程序设计思想与方法入门篇 庄天红.
大连理工大学软件学院 软件工程系 赖晓晨 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨
第七章 控制器 7.1 控制器的组成及指令的执行 7.2 控制方式和时序的产生 7.3 微程序控制器 7.4 微程序控制器及其微程序设计举例
Hardware Chen Ching-Jung
本周实验安排 实验内容:(P231)人名排序的例子。
Operating System Concepts 作業系統原理 Chapter 3 行程觀念 (Process Concept)
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
编译原理与技术 第7章 中间代码生成 3学时.
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
指令集架構 計算機也跟人類一樣,需要提供一套完整的語言讓人們跟它充分溝通,以完成正確的計算工作。
编译原理与技术 类型检查 2018/11/21 《编译原理与技术》-类型检查.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月05日.
单片机原理与应用 C/C++在现代数字计算机上的实现.
C 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
第六章 运行时存储空间的组织和管理 术语 本章内容 讨论一个活动记录中的数据布局 程序执行过程中,所有活动记录的组织方式 过程的活动
Operating System Internals and Design principles
Chapter 3 行程觀念 (Process Concept)
第2章 计算机指令集结构 曲冠南
C++ 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
計算機結構 – 概論 陳鍾誠 於金門大學.
嵌入式微处理器系统 第二章 处理器技术(1) 北京大学软件与微电子学院.
第 5 章、連結與載入 作者:陳鍾誠 旗標出版社.
第三章 词法分析.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
计算机原理及系统结构 第十八讲 主讲教师:赵宏伟                 学时:64.
第三章 栈和队列.
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
第 2 章、電腦的硬體結構 作者:陳鍾誠.
第五章 C/C++及汇编语言的混合编程 5.1 ARM C/C++编译器 5.2 在C/C++程序中内嵌汇编指令
中间代码生成.
第2章 PL/0编译程序 2.1 PL/0语言和类pcode的描述 2.2 PL/0编译程序的结构 2.3 PL/0编译程序的语法语义分析
組合語言和程式範例.
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程.
微机原理与接口技术 西安邮电大学计算机学院 王忠民.
第 3 章、組合語言 作者:陳鍾誠 旗標出版社.
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
2019/4/29 计算机组成原理 辅导教师:陆明强.
102學年度大學個人申請入學 招生審查資料上傳作業說明
Lucene 算法介绍 IR-Lab 胡晓光.
機器語言, 組合語言, 與編譯器 參考: β 文件; 實驗 #5B; C 語言講議 當我在我的程式碼中發現一堆 麻煩時, 朋友和同事跟我說了
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
資料結構簡介 綠園.
第二章 类型、对象、运算符和表达式.
遞迴 Recursion.
本节内容 计算机不会做加法 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Go 语言编程 —— 平台研发部 吴植民.
第6章 子程序结构 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 2019/7/20 ch6.
第3章 CPU子系统 西南石油大学计算机科学学院 主讲教师 杨 梅 联系电话:
其解亦可表为向量形式.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第5章 中 央 处 理 器 5.1 CPU的功能和组成 5.2 指令周期 5.3 时序产生器和控制方式 5.4 微程序控制器
Presentation transcript:

開放電腦計劃 報告人:陳鍾誠 2011 年 8 月 20 日 台灣開源人年會 COSCUP 2011 – 中研院 本文件採用創作共用 (Creative Common) 3.0 版的 姓名標示 授權條款

開放電腦計畫 -- 動機 學術界的一個重要任務 將工業技術研究清楚,並且寫成書籍或技術報告。 讓學生能習得重要的技術,理解工業結構與原理。

開放電腦計畫 -- 原則 採用 KISS (Keep It Simple and Stupid) 原則,越簡單越好。 不需要創新,盡可能採用成熟的舊技術。 重視原理、文件、而非程式技術

開放電腦計畫 -- 目標 設計一台完整的「開放原始碼電腦」,從軟體到硬體通通都是開放原始碼的。 CPU 、主機板、虛擬機、組譯器、編譯器、連結器、嵌入式作業系統、作業系統

開放電腦計畫 – 架構 CC1 (編譯器) AS1 (組譯器) LD1 (連結器) 作業系統 EOS1 OS1 硬體層 Board1 VM1 組合語言 (*.as1) 目的碼 (*.obj1) CC1 (編譯器) AS1 (組譯器) LD1 (連結器) 目的碼 (*.obj1) 作業系統 EOS1 OS1 硬體層 Board1 VM1 虛擬機 CPU1

開放電腦計畫 -- 子專案

開放電腦計畫 -- 基礎 2010 年出版了系統程式一書 定義了 實作了 CPU0 : 處理器 VM0 : 虛擬機 AS0 : 組譯器 C0C : 編譯器

開放電腦計畫 – 現況 處理器 虛擬機 組譯器 連結器: 編譯器 作業系統 CPU0  CPU1 規格確定 CPU1 Verilog 實作  研究中 虛擬機 VM0  VM1 已完成 組譯器 AS0  AS1 已完成 連結器: 尚未開始,目前先將全部程式連接起來組譯,暫時不需連結。 編譯器 C0C  CC1 已完成:剖析器、語意分析、符號表 撰寫中:程式碼產生 作業系統 eos0:已完成 兩個行程切換 (74 行 CPU1 的組合語言) eos1:尚未開始 os1:尚未開始

開放電腦計畫 – 專案建置

開放電腦計畫 – CPU1 位址線 資料線 暫存器單元 R0=0 R12=SW IR ALU 算術邏輯單元 控制單元 內部匯流排 Bus R14 = LR 輸出入單元 MDR MAR R15 = PC R13=SP … R1

CPU1 -- 暫存器 R0 R1-R15 唯讀暫存器。R0的值永遠都是常數零。 15 個可存取暫存器 R12:狀態暫存器 (Status Word, SW) R13:堆疊暫存器 (Stack Pointer Register, SP) R14:連結暫存器 (Link Register, LR) R15:程式計數器 (Program Counter, PC)

CPU1 – 指令集 包含四大類的指令 載入儲存 : LD, ST, … 運算指令 : ADD, SUB, XOR, SHL, ROL, … 跳躍指令 : JMP, JGT, JGE, CALL, INT 堆疊指令 : PUSH, POP, …

CPU1 – 指令格式 A 型 L 型 J 型 OP Cx (24 bits) Ra Rb Rc Cx (16 bits) 31-24 23-20 19-16 23-0 11-0 15-12 15-0 Cx (12 bits)

CPU1 – 載入儲存指令

CPU1 – 運算指令

CPU1 – 跳躍指令

CPU1 – 堆疊指令

CPU1 – 程式、編碼與執行 001F0028 002F0020 0830000A 08400001 10230000 2300000C 13121000 13242000 26FFFFEC 2C000000 00000000 記憶體 ALU (加法運算) 暫存器 IR=2300000C (JGT EXIT) PC=00000018 0000 0004 0008 000C 0010 0014 0018 001C 0020 0024 0028 002C 位址 LD R1, SUM LD R2, I LDI R3, 10 LDI R4, 1 CMP R2, R3 JGT EXIT ADD R1, R2, R1 ADD R2, R4, R2 JMP FOR RET RESW 1 WORD 0 程式 FOR: EXIT: 位址匯流排 資料匯流排 控制匯流排

CPU1 的組合語言範例 sum = 1+2+….+10 LD R1, sum LD R2, i LDI R3, 10 LDI R4, 1 FOR: CMP R2, R3 JGT EXIT ADD R1, R2, R1 ADD R2, R4, R2 JMP FOR EXIT: RET i: RESW 1 sum: WORD 0

開放電腦計畫 – AS1 組譯器

開放電腦計畫 – VM1 虛擬機

開放電腦計畫 – EOS0 最小作業系統

EOS0 – 兩行程不斷切換

EOS0 – 組譯

EOS0 – 執行 指令:vm1 eos0.obj1 10 說明: 用虛擬機 vm1 執行 eos0, 每 10 個指令切換一次。

開放電腦計畫 – 編譯器 CC1

C1 語言範例 – sum.c1 int main() { int s = sum(10); return s; } int sum(int n) { int i, s; for (i=1; i<=10; i++) s += i;

C1 語言範例 – sum.c1 剖析結果 …

C1 語言的 EBNF 語法 PROG = (STRUCT | METHOD | DECL ; )* METHOD = ETYPE ** ID(PARAM_LIST?) BLOCK STRUCT = struct ID { DECL_LIST ; } BLOCK = { BASE* } BASE = IF | FOR | WHILE | BLOCK | STMT ; IF = if (EXP) BASE (else BASE)? FOR = for (STMT ; EXP ; STMT) BASE WHILE = while (EXP) BASE STMT = return EXP | DECL | PATH (EXP_LIST) | PATH = EXP | PATH OP1 VAR = ** ID ([ integer ])* (= EXP)? EXP = TERM (OP2 TERM)? TERM = ( EXP (OP2 EXP)? ) | CINT | CFLOAT | CSTR | PATH PATH = ATOM ((.|->) ATOM)* ATOM = ID (([ EXP ])* |( EXP_LIST? )) DECL = ETYPE VAR_LIST PARAM = ETYPE VAR VAR_LIST = VAR (, VAR)* EXP_LIST = EXP (, EXP)* DECL_LIST = DECL (; DECL)* PARAM_LIST = PARAM (, PARAM)* ETYPE = (byte | char | int | float | ID)

開放電腦計畫 – 已完成事項 AS1 組譯器 VM1 虛擬機 CC1 剖析器 + 語意分析 EOS0 最小嵌入式作業系統 (兩行程切換)

開放電腦計畫 – 後續工作 (程式部份) 軟體部份 硬體部份 完成編譯器 CC1 的程式碼產生動作 撰寫 EOS1 嵌入式作業系統 (參考 Jserv 的  CuRT) 撰寫 OS1 作業系統 (參考 UNIX v6) 撰寫 LD1 連結器 (非必要) 撰寫 CI1 解譯器 (非必要) 硬體部份 用 Verilog 設計 CPU1 在 Altera 的板子上實測 CPU1 將 Arduino 的 CPU 換為 FPGA,並燒入 CPU1

開放電腦計畫 – 後續工作 (文件部份) 撰寫下列書籍 修改下列書籍 編譯器 – 理論與實務 作業系統 – 理論與實務 計算機結構 – 理論與實務 修改下列書籍 系統程式 – 理論與實務

開放電腦計畫 – 相關資源 PDP11 /UNIX v6 相關資源 http://minnie.tuhs.org/Archive/PDP-11/Distributions/research/Dennis_v6/ http://pdos.csail.mit.edu/6.828/2005/homework/hw5.html http://pdos.csail.mit.edu/6.828/2005/readings/pdp11-40.pdf Commentary on the Sixth Edition UNIX Operating System http://www.lemis.com/grog/Documentation/Lions/ UNIX xv6 (6.828: Operating System Engineering) http://pdos.csail.mit.edu/6.828/xv6/ UCore (中國大陸清華大學修改 UNIX xv6 之後的版本) http://code.google.com/p/ucore/ TinyCC http://bellard.org/tcc/ 系統程式 (書籍網站) http://sp1.wikidot.com/

講者資訊 金門大學 資訊工程系 助理教授 陳鍾誠 Email: ccckmit@gmail.com Facebook : http://www.facebook.com/ccckmit 個人網站:http://ccckmit.wikidot.com/ 開放電腦計畫: http://ccckmit.wikidot.com/ocs:main 開放電腦計畫 facebook 社團: http://www.facebook.com/groups/119424041473670 網路大學:http://netu.wikidot.com/