├── .github └── workflows │ └── deploy_bookdown.yml ├── .gitignore ├── 01-foreword-recommend.Rmd ├── 02-foreword-author.Rmd ├── 03-foreword-3rd.Rmd ├── 04-preface.Rmd ├── 05-online-version.Rmd ├── 11-introduction.Rmd ├── 12-isa.Rmd ├── 13-privileged-isa.Rmd ├── 14-software-hardware-coop.Rmd ├── 15-organization.Rmd ├── 16-bus.Rmd ├── 17-boot.Rmd ├── 18-microarch.Rmd ├── 19-pipeline.Rmd ├── 20-parallel-programming.Rmd ├── 21-multicore.Rmd ├── 22-perf-evaluation.Rmd ├── 30-conclusion.Rmd ├── 40-references.Rmd ├── 50-resources.Rmd ├── LICENSE ├── Makefile ├── README.md ├── _bookdown.yml ├── _output.yml ├── book.bib ├── chinese-gb7714-2005-numeric.csl ├── css └── style.css ├── docker └── Dockerfile ├── images ├── by-nc.png ├── chapter1 │ ├── 1-1.eps │ ├── china_design.png │ ├── device_to_chip.png │ ├── hierarchy.png │ ├── ic_develop.png │ └── power.png ├── chapter10 │ ├── MPI的6个基本的函数-01.png │ ├── MPI的6个基本的函数.ai │ ├── SISD_SIMD.png │ ├── Shared_storage_and_message_passing_programming.png │ ├── shared_task.png │ ├── 矩阵乘法算法示意-01.png │ ├── 矩阵乘法算法示意.ai │ ├── 积分求圆周率算法示意-01.png │ ├── 积分求圆周率算法示意.ai │ ├── 线程同步.ai │ ├── 线程同步.png │ ├── 线程管理-01.png │ ├── 线程管理.ai │ ├── 编译制导语言-01.png │ └── 编译制导语言.ai ├── chapter11 │ ├── 11-16.png │ ├── 11-17.png │ ├── 11-18.png │ ├── 11-24.png │ ├── 11-3.png │ ├── cache_structure.png │ ├── cell_arch.png │ ├── centralized_barrier.png │ ├── cuda_core.png │ ├── different_results.png │ ├── dir_invld.png │ ├── esi_transit.png │ ├── fermi_mem_hierarchy.png │ ├── flow_control_method.png │ ├── interconnect.png │ ├── la464_uarch.png │ ├── ll_sc_atomic.png │ ├── ls3a5000_arch.png │ ├── ls3a5000_layout.png │ ├── noc_example.png │ ├── nuca_interconnect.png │ ├── router_struct.png │ ├── sandybridge_arch.png │ ├── shared_llc.png │ ├── sm_single.png │ ├── sm_whole.png │ ├── test_and_set.png │ ├── tile64_arch.png │ └── topo.png ├── chapter12 │ ├── 3A5000和对比处理器的各级Cache和内存访问延迟数据-01.png │ ├── Nehalem平台中显示的perf list输出-01.png │ ├── Perf的工作原理图.png │ ├── 功能部件操作延迟-01.png │ ├── 基于跳步访问的3A5000和Zen1、Skylake各级延迟的比较(cycles).png │ ├── 基于随机访问的3A5000和Zen1、Skylake各级延迟的比较(cycles).png │ ├── 微基准测试程序集-01.png │ └── 访存操作的并发性.png ├── chapter2 │ ├── csr.png │ ├── hierarchy.png │ ├── inst_coding.png │ ├── isa-compare.png │ ├── loongarch-coding.png │ ├── lwl.png │ ├── page.png │ ├── seg-page.png │ └── segment.png ├── chapter3 │ ├── crmd.png │ ├── csr.png │ ├── memcpy_program.png │ ├── page_table.png │ ├── tlb_convert.png │ ├── tlb_entry.png │ └── tlb_reg.png ├── chapter4 │ ├── address_space.png │ ├── as_example.png │ └── stack_frame.png ├── chapter5 │ ├── 3A3000_display.png │ ├── 3A3000_display1.png │ ├── 3A3000_display2.png │ ├── 3A3000_display3.png │ ├── 3A3000_display4.png │ ├── bht_loop.png │ ├── disk_structure.png │ ├── dram_cell.png │ ├── loongson_3A3000.png │ ├── sdram_structure.png │ ├── soc.png │ ├── storage_hierarchy.png │ ├── structure_2part.png │ ├── structure_3part.png │ ├── structure_3part_weaknb.png │ ├── structure_4part.png │ └── von_architecture.png ├── chapter6 │ ├── ahb_apb.png │ ├── axi.png │ ├── axi_interconnect.png │ ├── burst_read.png │ ├── command_after.png │ ├── command_before.png │ ├── ddr2.png │ ├── ddr2_state.png │ ├── ddr3.png │ ├── ddr3_read.png │ ├── ddr3_write.png │ ├── ht_interconnect.png │ ├── ht_transfer.png │ ├── ht_two_chips.png │ ├── jz_m200.png │ ├── loongson_4way.png │ ├── overlapped_read.png │ ├── pci_interconnect.png │ ├── pci_signals.png │ ├── pcie_interconnect.png │ ├── pcie_location.png │ ├── pcie_packet.png │ ├── read_structure.png │ ├── sdram_timing.png │ ├── write_structure.png │ └── write_transaction.png ├── chapter7 │ ├── bar_reg.png │ ├── boot_flow.png │ ├── bus_access_type.png │ ├── config_reg.png │ └── l1_dcache.png ├── chapter8 │ ├── 16bit_CLA.png │ ├── 16bit_multiplying_unit.png │ ├── 1bit_full_adder.png │ ├── 1bit_full_adder_circuit.png │ ├── 1bit_wallace_tree_for8.png │ ├── 32bit_CLA.png │ ├── 32bit_RCA.png │ ├── 4bit_CLA(include carry factor).png │ ├── 4bit_CLA.png │ ├── 4bit_comparer.png │ ├── 4bit_shifter.png │ ├── 8-19A.png │ ├── 8-21a.png │ ├── 8-22a.png │ ├── Booth_multiplication with shifter.png │ ├── Booth_partial_product.png │ ├── Booth_select_logic.png │ ├── Booth_selectsignal_logic.png │ ├── Booth_two_multiplication.png │ ├── CMOS_D_Flip-Flop.png │ ├── CMOS_NAND_gate.png │ ├── CMOS_NOR_gate.png │ ├── CMOS_NOT_gate.png │ ├── CMOS_TRANS_gate.png │ ├── CMOS_inverter_delay.png │ ├── D_latch.png │ ├── Dlatch_timing.png │ ├── FULL_adder for four 4bit number.png │ ├── FULL_adder for three 4bit number.png │ ├── IEEE754_float.png │ ├── MOS_structure.png │ ├── MOS_switch.png │ ├── NMOS_workingprinciple.png │ ├── RS_latch.png │ ├── WORONG_exaxple of walllace tree.png │ ├── booth_one_multiplication.png │ ├── clock_signal.png │ ├── complement_multiplication.png │ ├── hw logic gate.png │ ├── hwCMOS.png │ ├── iterative_complement_multipilier.png │ ├── iterative_sourcecode_multipilier.png │ ├── logic_gate.png │ ├── sicicium_atomic_structure.png │ └── subtracter.png ├── chapter9 │ ├── BTB.png │ ├── LS3A2000.emf │ ├── LS3A3000.png │ ├── PHT.png │ ├── brachRelation.ai │ ├── brachRelation.png │ ├── cache.emf │ ├── cache.png │ ├── cacheMap.png │ ├── cacheMapStruct.png │ ├── componentflow.emf │ ├── componentflow.png │ ├── componentflowWithStall.png │ ├── ctrlHazard.png │ ├── ctrlHazardFlow.png │ ├── ctrlHazardFlow1.png │ ├── ctrlHazardStruct.png │ ├── datapathWithClk.png │ ├── decode.png │ ├── dualIssue.ai │ ├── dualIssue.png │ ├── dynamic.emf │ ├── dynamic.png │ ├── dynamic1.png │ ├── forwarding.png │ ├── instHazardPipeline.png │ ├── multicycle.png │ ├── multicycleflow.emf │ ├── multicycleflow.png │ ├── pipelineflow.png │ ├── pipelinestruct.emf │ ├── pipelinestruct.png │ ├── raw.png │ ├── simpleCPUdatapath.emf │ ├── simpleCPUdatapath.png │ └── stallflow.png └── foreword │ └── liguojie_sign.png ├── index.Rmd ├── latex ├── after_body.tex ├── before_body.tex ├── preamble.tex └── template.tex ├── materials ├── chapter1 │ ├── flops_bandwidth.csv │ ├── program_and_data.csv │ └── spec_cpu2000.csv ├── chapter10 │ ├── MPI.c │ ├── Makefile │ ├── OpenMP_struct.c │ ├── Pthreads.c │ ├── SIMD.S │ ├── atomic.c │ ├── barrier.c │ ├── critical.c │ ├── dataprallel.c │ ├── for.c │ ├── loongsonSIMD.S │ ├── maritx_OpenMP.c │ ├── martix_MPI.c │ ├── master.c │ ├── paralle.c │ ├── parallel_for.c │ ├── parallel_sections.c │ ├── pi_C.c │ ├── pi_MPI.c │ ├── pi_OpenMP.c │ ├── pi_Pthreads.c │ ├── sections.c │ ├── single.c │ ├── taskparllel.c │ ├── test4.c │ ├── threadprivate.c │ └── tra_SIMD.c ├── chapter11 │ └── cache_parameter.csv ├── chapter12 │ ├── 2006brbandwidth.csv │ ├── 2006brpercent.csv │ ├── 2006brpred.csv │ ├── 2006insts.csv │ ├── 2006ipc.csv │ ├── 2006rate4.csv │ ├── 2006speed-nopara.csv │ ├── 2006speed.csv │ ├── AMDTest.csv │ ├── LMbench.csv │ ├── PARSEC.csv │ ├── SPEC2000.csv │ ├── SPEC2006.csv │ ├── SPEC2017.csv │ ├── STREAM.csv │ ├── UnixBench.csv │ ├── alu-delay.csv │ ├── cpu-params.csv │ ├── memory-latency.csv │ ├── perf-eval-class.csv │ ├── perf-event-3A5000.csv │ ├── perf-event-nehalem.csv │ ├── perf-tools.csv │ ├── performance-formula.csv │ └── stream-bandwidth.csv ├── chapter2 │ ├── add_and_ref.S │ ├── add_and_ref.c │ ├── addr_compare.csv │ ├── addressing.csv │ ├── alpha.S │ ├── alpha_note.txt │ ├── alu_inst.csv │ ├── control_inst.csv │ ├── if_else.S │ ├── if_else.c │ ├── int_type.csv │ ├── isatype.csv │ ├── loop.S │ ├── loop.c │ ├── mem_inst.csv │ ├── ppc.S │ ├── ppc_note.txt │ ├── regnum.csv │ ├── switch_case.S │ ├── switch_case.c │ ├── switch_case_chain.S │ └── vax_addressing.csv ├── chapter3 │ ├── csr.csv │ └── exception.csv ├── chapter4 │ ├── Makefile │ ├── context_switch.csv │ ├── dynamic.S │ ├── dynamic.S.png │ ├── dynamic.c │ ├── dynamic.c.png │ ├── fun.c │ ├── fun.c.png │ ├── fun_la.S │ ├── fun_la.S.png │ ├── fun_mips.S │ ├── fun_mips.S.png │ ├── keyboard_interrupt.txt │ ├── keyboard_interrupt.txt.png │ ├── la_reg.csv │ ├── mips_reg.csv │ ├── normal.S │ ├── normal.S.png │ ├── normal.c │ ├── normal.c.png │ ├── simple.S │ ├── simple.S.png │ ├── simple.c │ ├── simple.c.png │ ├── simple_nofp.S │ ├── simple_nofp.S.png │ ├── syscall.csv │ ├── syscall_write.S │ ├── syscall_write.S.png │ ├── t.S │ ├── t.c │ ├── varg.c │ ├── varg.c.png │ └── varg_passing.csv ├── chapter5 │ ├── alu.csv │ └── pio_vs_dma.csv ├── chapter6 │ ├── axi.csv │ ├── ddr3_udimm.csv │ ├── ht_packet_format.csv │ ├── ht_request.csv │ ├── ht_response.csv │ ├── ht_signals.csv │ └── pcie_signals.csv ├── chapter7 │ ├── reg_multiplex.csv │ ├── serial_status.csv │ ├── space_allocation.csv │ └── space_requirement.csv └── chapter8 │ ├── 3-8decoder_true_table.csv │ ├── 8-1selector_true_table.csv │ ├── IEEE754float.csv │ ├── boolean.csv │ ├── booth_one_rule.csv │ ├── booth_two_rule.csv │ ├── fulladder_truetable.csv │ └── vertical_calculation.csv ├── multi_column.template ├── renv.lock └── word └── template.docx /.github/workflows/deploy_bookdown.yml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | branches: 4 | - main 5 | pull_request: 6 | branches: 7 | - main 8 | 9 | name: renderbook 10 | 11 | permissions: 12 | contents: write 13 | pages: write 14 | gh-pages: write 15 | 16 | jobs: 17 | bookdown: 18 | name: Render-Book 19 | runs-on: ubuntu-latest 20 | container: 21 | image: foxsen76/archbase-builder:latest 22 | steps: 23 | - name: bookdown builder 24 | run: cd /opt/archbase && git pull && make -j 8 && cp -a ./_book /github/home/ 25 | 26 | - name: Deploy to GitHub Pages 27 | uses: Cecilapp/GitHub-Pages-deploy@v3 28 | env: 29 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 30 | with: 31 | email: 2503799872@qq.com 32 | build_dir: /github/home/_book/ 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .Rproj.user 2 | .Rhistory 3 | .RData 4 | .Ruserdata 5 | _book 6 | _bookdown_files 7 | project.vim 8 | materials/*/*.png 9 | -------------------------------------------------------------------------------- /01-foreword-recommend.Rmd: -------------------------------------------------------------------------------- 1 | # 推荐序 {-} 2 | \markboth{推荐序}{推荐序} 3 | 4 | “计算机体系结构”(Computer Architecture)也称为“计算机系统结构”,是计算机科学与技术一级学科下最重要的二级学科。“计算机体系结构”是研究怎么造计算机而不是怎么用计算机的学科。我国学者在如何用计算机的某些领域的研究已走到世界前列,例如最近很红火的机器学习领域,中国学者发表的论文数和引用数都已超过美国,位居世界第一。但在如何造计算机的领域,参与研究的科研人员较少,科研水平与国际上还有较大差距。2016年国家自然科学基金会计算机学科的面上项目共有4863项申请,但申报“计算机体系结构”(F0203)方向的项目只有22项,占总申报项目的0.45%,而申报计算机图像与视频处理方向的项目有439项。 5 | 6 | 做计算机体系结构方向研究的科研人员较少与大学及研究生的课程教育直接相关。计算机体系结构是工程性很强的学科,而我国的大学老师大多没有机会实际参与设计CPU和操作系统,对计算机的软硬件工作过程不能融会贯通,教学时只能照本宣科,学生只学到一些似懂非懂的名词概念,难以培养“造计算机”的兴趣。目前全国许多高校使用从国外翻译的体系结构教材,John L. Hennessy和 David A. Patterson合著的《计算机体系结构:量化研究方法》已经不断改版至第5版,被认为是计算机体系结构的经典教材,但此书有近千页之厚,本科生未必都能接受。国内也出版了不少体系结构(系统结构)方面的教材,但多数兼顾了研究生和参考书的需求。因此,迫切需要一本为本科生量身定制的计算机体系结构精品教材。 7 | 8 | 摆在读者面前的这本《计算机体系结构基础》就是为满足本科教育而编著的精品教材。过去出版的体系结构教材大多是“眼睛向上”编写的,作者既考虑了做本科教材的需求,又考虑了参考书的需求,为了体现参考书的技术前瞻性,往往会包含一些未经受考验的新技术。而本书是作者在2011年已经出版的硕士生教材《计算机体系结构》的基础上,“眼睛向下”编著的本科生教材,多年的研究生授课经历使作者十分明确本科生应学习哪些体系结构的基础知识。凡写进这本教科书的内容都是本科生应该掌握的知识,不会为追求时髦而增加额外的内容。 9 | 10 | 与过去出版的计算机体系结构教科书相比,本书有以下几个特点: 11 | 12 | 第一个特点是特别重视知识的基础性。计算机发明至今已经70余年,曾经用来造计算机的技术多如牛毛,计算机期刊与会议上发表的文章数以万计,但是许多技术如过往烟云,已经被丢进历史的垃圾堆。我在美国读博士时,一位很有权威的教授讲了一个学期计算机体系结构课,基本上都是讲并行计算机的互连(Interconnection)结构,如蝶形(Butterfly)互连、超立方体(Hypercube)互连、胖树(Fat Tree)互连等,现在这些内容已不是计算机界普遍关心的问题。20世纪90年代,计算机体系结构国际会议(ISCA)几乎成了专门讨论缓存(Cache)技术的会议,但没有几篇文章提出真正可用的缓存技术,以至于计算机界的权威John L. Hennessy教授1997年说出这样的话:“把1990年以来计算机系统结构方面所有的论文都烧掉,对计算机系统结构没有任何损失。”本书作者在“自序”中写道:“计算机体系结构千变万化,但几十年发展沉淀下来的原理性的东西不多,希望从体系结构快速发展的很多现象中找出一些内在的、本质的东西。”毛泽东在《实践论》中归纳总结了十六个字:“去粗取精,去伪存真,由此及彼,由表及里。”本书作者遵循这十六个字的精神,对几十年的计算机体系结构技术做了认真的鉴别、选择和对比、分析,写进教科书的内容是经得起历史考验的基础知识。 13 | 14 | 第二个特点是强调“一以贯之”的系统性。“计算机系统结构”的关键词是“系统”而不是“结构”,国外做计算机系统结构研究的学者介绍自己时往往是说:“我是做系统(System)研究的。”计算机专业的学生应具有系统层面的理解能力,能站在系统的高度解决应用问题。对计算机系统是否有全面深入的了解是区别计算机专业人才和非专业人才的重要标志。长期以来我们采用“解剖学”的思路进行计算机教学,按照硬件、软件、应用等分类横切成几门相对独立的课程,使得计算机系毕业的学生对整个计算机系统缺乏完整的理解。如果问已经学完全部计算机课程的学生,在键盘上敲一个空格键到屏幕上的PPT翻一页,在这一瞬间计算机中哪些硬件和软件在运转,如何运转,可能绝大多数学生都讲不清楚。本书有若干章节专门讲述计算机的软硬件协同、计算机系统的启动过程等,着力培养学生的全局思维能力。为了使学生一开始就对计算机有全局的框架性认识,此教材的第1章对全书内容做了尽可能通俗易懂的描述,这是追求系统性教学的刻意安排。本书作者强调:“一个计算机体系结构设计人员就像一个带兵打仗的将领,要学会排兵布阵。要上知天文、下知地理,否则就不会排兵布阵,或者只会纸上谈兵地排兵布阵,只能贻误军国大事。”这里讲的“天文”是指应用程序、编译程序和操作系统,“地理”是指逻辑、电路和工艺。只有上下贯通,才能真正掌握计算机体系结构。 15 | 16 | 第三个特点是强调能在硅上实现的实践性。由于CMOS电路集成度的指数性提高,一块CPU芯片已可以集成几十亿晶体管。计算机体系结构的许多知识现在都体现在CPU中,因此从某种意义上讲,不懂CPU设计就不能真正明白计算机体系结构的奥妙。CPU的结构通常称为微体系结构,主要在硕士课程中讲授,但本科生的体系结构课程也应学习在硅上能实现的技术。陆游诗云:“纸上得来终觉浅,绝知此事要躬行。”只会P2P的学习(从Paper到Paper的学习)往往学不到真本事,只有最后能“躬行”到硅上的知识才是过硬的知识。本书作者有十几年从事CPU设计的经验,能正确区分哪些是纸上谈兵的知识,哪些是能落实到硅上的知识,这是他们独特的优势。在中国科学院大学的本科教学中,计算机体系结构课程还辅以高强度的实验课,实践证明这对学生真正理解课堂学到的知识大有好处。 17 | 18 | 本书内容选材还需要经过课堂教学的长期检验,需要不断听取学生的反馈意见和同行的批评建议,希望经过几年的完善修改,本书能真正成为受到众多大学普遍欢迎的精品教材。 19 | 20 | ```{r liguojie-sign, fig.align='right', echo = FALSE} 21 | knitr::include_graphics('./images/foreword/liguojie_sign.png') 22 | ``` 23 | 24 | \newpage 25 | -------------------------------------------------------------------------------- /02-foreword-author.Rmd: -------------------------------------------------------------------------------- 1 | # 自序 {-} 2 | \markboth{自序}{自序} 3 | 4 | 计算机专业有几门“当家”的核心课程是关于“如何造计算机”的,硬件方面以计算机组成原理和计算机体系结构为主,软件方面以操作系统和编译原理为主。其他如离散数学、编程语言、数据结构、数字逻辑等计算机专业的学科基础课也很重要,除了计算机专业,其他使用计算机的专业如自动化专业、电子专业也在学。 5 | 6 | 我从2001年就开始从事龙芯处理器的研发,并从2005年起在中国科学院大学教授计算机体系结构课程,其间接触了很多从各高校计算机专业毕业的学生,发现他们在大学时主要练就了诸如编程等“怎么用计算机”的本领,对操作系统和体系结构这种“如何造计算机”的课程,或者没有系统学习,或者只学到一些概念。比如对于“从打开电源到计算机启动再到登录界面”或者“从按一下空格键到翻一页PPT”这样的过程,如果问及计算机系统内部包括CPU、南北桥、GPU在内的硬件以及包括操作系统和应用程序在内的软件是如何协同工作的,计算机专业毕业的学生几乎没有人说得明白。 7 | 8 | 我1986年到中国科学技术大学计算机系学习的时候,教授我计算机体系结构课程的老师都是亲自造过计算机的,他们能够讲明白计算机软硬件工作的原理性过程。改革开放以来,我国主要使用国外的CPU和操作系统“攒”计算机,学术界也几乎不从事CPU和操作系统这种核心技术的研究工作,全国两千多个计算机专业主要使用国外教材或者翻译的国外教材教授学生“如何造计算机”。由于计算机体系结构和操作系统都是工程性很强的学科,而任课老师却没有机会参与设计CPU和操作系统,因此教学生的时候难免照本宣科,使学生只学到一些概念,难以对计算机的软硬件工作过程融会贯通。 9 | 10 | 发展以CPU和操作系统为代表的自主基础软硬件,是国家的战略需求,而人才培养是满足该战略需求的必要条件。因此,自2005年开始,我便结合龙芯CPU的实践在中国科学院研究生院开设计算机体系结构课程,并于2011年依托清华大学出版社出版了《计算机体系结构》教材。2014年,中国科学院大学设立并开始招收本科生,要求我也给本科生讲授计算机体系结构课程。刚开始觉得难度很大,因为计算机体系结构非常复杂,给研究生讲清楚都不容易,给本科生讲清楚就更难。 11 | 12 | 经过反复思考,我觉得可以利用这个机会,建设包括本科生、硕士生、博士生在内的计算机体系结构课程体系,由浅入深地培养“造计算机”的人才。为此,我们计划编写一套分别面向本科生、硕士生、博士生的“计算机体系结构”课程教材。 13 | 14 | 面向本科生的教材为《计算机体系结构基础》。主要内容包括:作为软硬件界面的指令系统结构,包含CPU、GPU、南北桥协同的计算机硬件结构,CPU的微结构,并行处理结构,计算机性能分析等。上述面面俱到的课程安排主要是考虑到体系结构学科的完整性,但重点是软硬件界面及计算机硬件结构,微结构则是硕士课程的主要内容。 15 | 16 | 面向硕士生的教材为《计算机体系结构》。主要介绍CPU的微结构,包括指令系统结构、二进制和逻辑电路、静态流水线、动态流水线、多发射流水线、运算部件、转移猜测、高速缓存、TLB、多核对流水线的影响等内容。 17 | 18 | 面向博士生的教材为《高级计算机体系结构》。中科院计算所的“高级计算机体系结构”课程是博士生精品课程的一部分,主要强调实践性,使学生通过设计真实的(而不是简化的)CPU,运行真实的(而不是简化的)操作系统,对结构设计、物理设计、操作系统软件做到融会贯通。 19 | 20 | 在此基础上,还将推出计算机体系结构实验平台和实验教材。 21 | 22 | 这套教材的编写突出以下特点:一是系统性,体系是“系统的系统”,很难脱离软硬件环境纯粹就体系结构本身讲解计算机体系结构,需要对体系结构、基础软件、电路和器件融会贯通;二是基础性,计算机体系结构千变万化,但几十年发展沉淀下来的原理性的东西不多,希望从体系结构快速发展的很多现象中找出一些内在的、本质的东西;三是实践性,计算机体系结构是实践性很强的学科,要设计在“硅”上运行而不是在“纸”上运行的体系结构。 23 | 24 | 胡伟武 25 | 26 | \newpage 27 | 28 | -------------------------------------------------------------------------------- /03-foreword-3rd.Rmd: -------------------------------------------------------------------------------- 1 | # 第三版序 {-} 2 | \markboth{第三版序}{第三版序} 3 | 4 | 在中国科学院大学讲授“计算机体系结构基础”课程五年以来,发现了《计算机体系结构基础》教材不少值得改进的地方。除了修订第2版的一些错误,这次第3版的主要改进内容包括以下三个方面。 5 | 6 | 一是加强计算机软硬件协同方面的内容。如第4章对应用程序二进制接口(Application Binary Interface,简称ABI)的描述更加清楚,增加了操作系统中关于用户程序地址空间分布的内容,并介绍了函数调用、例外处理、系统调用、线程切换、进程切换和虚拟机切换等六种场景的现场保留和恢复过程,希望读者可以通过上述过程更深入地了解计算机系统软硬件的配合。又如第7章在介绍计算机系统启动过程时把串口作为一只“麻雀”进行解剖,希望读者可以借此了解CPU对IO设备的访问与对内存的访问的不同。这样的地方还有不少。 7 | 8 | 二是对部分内容进行调整以使之更完整和适用。如第3章的特权指令系统部分,从例外、中断、存储管理等方面更详细地分析了操作系统内核专用的特权指令系统的内容。第12章的性能分析部分,在详细介绍Perf性能分析工具的基础上去掉了对Oprofile性能分析工具的介绍,适当缩减了性能测试与分析的具体案例内容,突出基准程序性能测试、Perf微结构数据统计和微测试程序(Microbench)等不同角度的方法与工具在性能分析工作中的应用。 9 | 10 | 三是在指令系统举例时使用LoongArch指令系统而不是MIPS指令系统。LoongArch是由龙芯团队在2020年推出的新型RISC指令系统。该指令系统摒弃了传统指令系统中部分不适应当前软硬件设计技术发展趋势的陈旧内容,吸纳了近年来指令系统设计领域诸多先进的技术发展成果,有助于硬件实现高性能低功耗的设计,也有利于软件的编译优化以及操作系统、虚拟机的开发。 11 | 12 | 一门课程的成熟往往需要十年时间。上述根据五年的教学经验进行的修改肯定还不够,需要在未来的教学工作中继续进行改进。 13 | 14 | 胡伟武 15 | 16 | 2021年6月29日 17 | 18 | \newpage 19 | -------------------------------------------------------------------------------- /04-preface.Rmd: -------------------------------------------------------------------------------- 1 | # 前言 {-} 2 | \markboth{前言}{前言} 3 | 4 | 计算机体系结构是一门比较抽象的学科,很有可能经过一个学期的学习只学到一些概念。本课程教学希望达到三个目的。一是建立学生的系统观。计算机系统的复杂性体现在计算机中各部分之间的关系非常复杂。如苹果iPhone的CPU性能不如Intel的X86 CPU,但用户体验明显好于桌面计算机,这就是系统优化的结果。希望学生学完这门课程后能够从系统的角度看待计算机,不再简单地以主频论性能,或者简单地把用户体验归结于CPU的单项性能。二是掌握计算机体系结构的若干概念。计算机体系结构中的概念很多,虽然抽象,但是必须掌握。比如计算机体系结构的四大设计原则,指令系统结构,处理器流水线,等等。三是掌握一些重点知识并具备一些重点能力。主要包括:计算机的ABI接口,存储管理中的虚实地址转换过程,通过IO地址空间扫描进行IO设备初始化,计算机系统的启动过程,重要总线如AXI总线、内存总线、PCIE总线的信号及其时序,用Verilog编写RTL代码的能力,先行进位加法器的逻辑,两位一乘补码乘法器逻辑,用Perf进行性能分析的能力,等等。 5 | 6 | 本书第一部分为引言,介绍体系结构研究内容、主要性能指标、发展趋势以及设计原则。计算机体系结构(Computer Architecture)是描述计算机各组成部分及其相互关系的一组规则和方法,是程序员所看到的计算机属性。计算机体系结构的主要研究内容包括指令系统结构(Instruction Set Architecture,简称ISA)和计算机组织结构(Computer Organization)。微体系结构(Micro-architecture)是微处理器的组织结构,并行体系结构是并行计算机的组织结构。冯·诺依曼结构的存储程序和指令驱动执行原理是现代计算机体系结构的基础。 7 | 8 | 本书第二部分介绍以指令系统结构为核心的软硬件界面,包括指令系统总体介绍、指令集结构、异常与中断、存储管理、软硬件协同等内容。贯穿该部分内容的一个核心思想是建立高级语言(如C语言)与指令系统结构的关系。例如,C语言的语句与指令系统的关系,算术语句可直接映射为相关运算指令,for循环映射为条件跳转,switch语句映射为跳转索引和跳转表等;操作系统中地址空间的组织与指令访问内存的关系,静态全局变量映射到地址空间的静态数据区、局部变量映射到堆栈区、动态分配的数据则映射到进程空间的堆中;操作系统中进程和线程的表示及切换在指令和地址映射方面的具体体现;敲击键盘和移动鼠标等事件如何通过指令系统的外部中断传递到CPU,以及指令系统对操作系统处理外部中断的必要支持;等等。 9 | 10 | 本书第三部分介绍计算机硬件结构。该部分的核心思想是搞清楚计算机内部包括CPU、GPU、内存、IO之间是如何协同完成软件规定的各种操作的。例如,在计算机开机过程中,BIOS完成硬件初始化后把操作系统从硬盘拷贝到内存执行的过程中南北桥与CPU是如何配合的;CPU和GPU是如何协同操作完成计算机屏幕显示的,在显示过程中哪些活是CPU干的,哪些活是GPU干的;以太网接口、USB接口等各种接口的驱动在硬件上的具体体现是什么;等等。 11 | 12 | 本书第四部分介绍微结构。该部分的核心思想是建立指令系统和晶体管之间的“桥梁”。微结构是决定CPU性能的关键因素。由于微结构是“计算机体系结构”硕士课程的主要内容,因此本科课程的微结构内容在追求系统地介绍有关概念的基础上,重点把先行进位加法器和五级静态流水线讲透,希望学生通过对先行进位加法器、五级静态流水线、简单转移猜测和高速缓存原理的深入了解,举一反三地了解微结构的实现方式。微结构中动态流水线、乱序执行和多发射等内容只做概念性的介绍。 13 | 14 | 本书第五部分介绍并行处理结构。应用程序的并行行为是并行处理的基础,现代计算机通过多层次的并行性开发来提高性能。并行处理编程模型包括消息传递模型(如MPI)和共享存储模型(如OpenMP)等。多核处理器的设计需要考虑存储一致性模型、高速缓存一致性协议、片上互连、多核同步等核心问题。 15 | 16 | 本书第六部分介绍计算机的性能分析方法。性能不是由一两个具体指标(如主频)决定的,而是若干因素综合平衡的结果;性能评测也没有绝对合理公平的办法,不同的计算机对不同的应用适应性不一样,对某类应用甲计算机比乙计算机性能高,对另外一类应用可能反之。巨大的设计空间和工作负载的多样性,导致计算机系统的性能分析和评价成为一个非常艰巨的任务。计算机性能分析的主要方法包括理论建模,用模拟器进行性能模拟,以及对实际系统进行性能评测等。 17 | 18 | 上述面面俱到的课程安排主要是考虑体系结构学科的完整性,但本科课程重点是软硬件界面及计算机硬件结构。对于一般高校,并行处理结构和计算机系统性能分析可以不讲。 19 | 20 | 在选修本课程前,学生应对C语言程序设计、数字逻辑电路有一定的基础。本课程试图说明一个完整的计算系统的工作原理,其中涉及部分操作系统的知识。为了有更好的理解,学生还可以同时选修操作系统课程。课程中的实例和原理介绍以LoongArch体系结构为主。与传统课程中讲授的X86体系结构相比,LoongArch结构相对简单明晰而又不失全面。学生可以通过配套的实验课程,自底而上构建自己的计算机系统,包括硬件、操作系统以及应用软件,从而对“如何造计算机”有更深刻的认识。 21 | 22 | \newpage 23 | -------------------------------------------------------------------------------- /05-online-version.Rmd: -------------------------------------------------------------------------------- 1 | # 关于本书的在线版本{-} 2 | 3 | 在第三版的改版过程中,作者们引入了一个创新尝试,试图将本书打造为一本活的教科书。具体来说,我们采用以文本为基础的rmarkdown格式编辑书本内容(相关的工具说明参见[bookdown](https://bookdown.org)),用git对其进行版本管理,并在互联网进行开源维护。在相应的网站上,还会提供出版社提供的与纸质版本一致的电子版本,以及相关的参考课件PPT和其他补充资源。我们认为这么做有几个好处: 4 | 5 | * 文字、图片和参考课件等素材的开放更方便教学使用。通过开源本书,我们期望能够使它得到更广泛的采用,得到更多的批评指正意见,使得它能够更快成熟。 6 | * 方便的版本管理系统有助于及时吸收对本书的勘误和改进。一方面,读者可以通过项目的问题管理系统或者其他渠道反馈问题,被接纳后会立即反映到在线的版本中,不必等待下一次改版印刷周期。另一方面,作者们也可以将之前对由于时间仓促未来得及完善的内容进行补充完善,或者根据产业的发展需求对内容进行适当调整。 7 | * 新的格式能够提供更丰富的表现形式。在rmarkdown文本的基础上,系统可以自动生成HTML、word和PDF等各种格式的发布版本,扩大适用范围。后续还可以利用其中某些格式来实现传统纸质书本无法做到的实时交互等功能。 当然,限于rmarkdown/bookdown目前的表现能力以及作者们对其的应用水平,在线版本生成的发布版本排版细节质量上很可能比不上出版社提供的、与纸质版本一致的原始电子文件,阅读体验上也不能替代纸质版本。有条件的读者仍然可以选择由机械工业出版社出版发行的纸质版本。 8 | 9 | 由于工具的限制,在线版本和纸质版本的版面效果并非完全一致。目前图表的编号也不一定一一对应,部分纸质书的表可能用图来代替。后续随着一些修订内容的添加,在线版本的文字和纸质版本也会有所差别。 10 | 11 | 本书内容的开源离不开出版社、龙芯中科技术股份有限公司和作者们的支持,在此表示感谢。出版社提供了精心排版后的电子版本和相应资源文件,并同意开放这些资源。龙芯中科技术股份有限公司提供了在线版本的一份web服务器资源以及部分经费支持。作者们接受了可能的出版收益损失。 12 | 13 | 本书电子版也得到了中国科学院大学研究生程轶涵、穆热迪力、徐淮、叶锦鹏、王铭剑(按姓氏拼音顺序)等同学的大力支持,他们协助完成了rmarkdown格式部分源代码的编辑和校对,在此表示感谢! 14 | -------------------------------------------------------------------------------- /30-conclusion.Rmd: -------------------------------------------------------------------------------- 1 | # 总结 {-} 2 | \markboth{总结}{总结} 3 | 4 | 经过本课程的学习,大家对计算机体系结构有了一个具体的了解,但要问起什么是计算机体系结构,多半答不上来。本章内容是笔者撰写的《中国大百科全书》计算机体系结构词条初稿,力求完整、准确地对计算机体系结构进行描述,作为本书的总结。 5 | 6 | 7 | 8 | 计算机体系结构(Computer Architecture)是描述计算机各组成部分及其相互关系的一组规则和方法,是程序员所看到的计算机属性。计算机体系结构主要研究内容包括指令系统结构(Instruction Set Architecture,简称ISA)和计算机组织结构(Computer Organization)。微体系结构(Micro-architecture)是微处理器的组织结构,并行体系结构是并行计算机的组织结构。冯诺依曼结构的存储程序和指令驱动执行原理是现代计算机体系结构的基础。 9 | 10 | 计算机体系结构可以有不同层次和形式的表现方式。计算机体系结构通常用指令系统手册和结构框图来表示,结构框图中的方块表示计算机的功能模块,线条和箭头表示指令和数据在功能模块中的流动,结构框图可以不断分解一直到门级或晶体管级。计算机体系结构也可以用高级语言如C语言来表示,形成结构模拟器,用于性能评估和分析。用硬件描述语言(如Verilog)描述的体系结构可以通过电子设计自动化(Electronic Design Automation,简称EDA)工具进行功能验证和性能分析,转换成门级及晶体管级网表,并通过布局布线最终转换成版图,用于芯片制造。 11 | 12 | 1、冯诺依曼结构及其基本原理 13 | 14 | 1945年匈牙利籍数学家冯诺伊曼结合EDVAC计算机的研制提出了世界上第一个完整的计算机体系结构,被称为冯诺伊曼结构。冯诺依曼结构的主要特点是:①计算机由存储器、运算器、控制器、输入设备、输出设备五部分组成,其中运算器和控制器合称为中央处理器(Central Processing Processor,简称CPU)或处理器。②存储器是按地址访问的线性编址的一维结构,每个单元的位数固定。指令和数据不加区别混合存储在同一个存储器中。③控制器从存储器中取出指令并根据指令要求发出控制信号控制计算机的操作。控制器中的程序计数器指明要执行的指令所在的存储单元地址。程序计数器一般按顺序递增,但可按指令要求而改变。④以运算器为中心,输入输出(Input/Output,简称IO)设备与存储器之间的数据传送都经过运算器。 15 | 16 | 随着技术的进步,冯诺依曼结构得到了持续改进,主要包括:①以运算器为中心改进为以存储器为中心,数据流向更加合理,从而使运算器、存储器和IO设备能够并行工作。②由单一的集中控制改进为分散控制。早期的计算机工作速度低,运算器、存储器、控制器和IO设备可以在同一个时钟信号的控制下同步工作。现在运算器、存储器与IO设备的速度差异很大,需要异步分散控制。③从基于串行算法改进为适应并行算法,出现了流水线处理器、超标量处理器、向量处理器、多核处理器、对称多处理机(Symmetric Multiprocessor,简称SMP)、大规模并行处理机(Massively Parallel Processing,简称MPP)和机群系统等。④出现了为适应特殊需要的专用计算机,如图形处理器(Graphic Processing Unit,简称GPU)、数字信号处理器(Digital Signal Processor,简称DSP)等。 17 | 18 | 虽然经过了长期的发展,以存储程序和指令驱动执行为主要特点的冯诺伊曼结构仍是现代计算机的主流结构。非冯诺伊曼计算机的研究成果包括依靠数据驱动的数据流计算机、图约计算机等。 19 | 20 | 21 | 22 | 2、指令系统结构 23 | 24 | 计算机系统为软件编程提供不同层次的功能和逻辑抽象,主要包括应用程序编程接口(Application Programming Interface,简称API)、应用程序二进制接口(Application Binary Interface,简称ABI)以及ISA三个层次。 25 | 26 | API是应用程序的高级语言编程接口,在编写程序的源代码时使用。常见的API包括C语言、Fortran语言、Java语言、Javascript语言、OpenGL图形编程接口等。使用一种API编写的应用程序经重新编译后可以在支持该API的不同计算机上运行。 27 | 28 | ABI是应用程序访问计算机硬件及操作系统服务的接口,由计算机的用户态指令和操作系统的系统调用组成。为了实现多进程访问共享资源的安全性,处理器设有“用户态”与“核心态”。用户程序在用户态下执行,操作系统向用户程序提供具有预定功能的系统调用函数来访问只有核心态才能访问的硬件资源。当用户程序调用系统调用函数时,处理器进入核心态执行诸如访问IO设备、修改处理器状态等只有核心态才能执行的指令。处理完系统调用后,处理器返回用户态执行用户代码。相同的应用程序二进制代码可以在相同ABI的不同计算机上运行。 29 | 30 | ISA是计算机硬件的语言系统,也叫机器语言,是计算机软件和硬件的界面,反映了计算机所拥有的基本功能。计算机硬件设计人员采用各种手段实现指令系统,软件设计人员使用指令系统编制各种软件,用这些软件来填补指令系统与人们习惯的计算机使用方式之间的语义差距。设计指令系统就是要选择应用程序和操作系统中一些基本操作应由硬件实现还是由软件通过一串指令实现,然后具体确定指令系统的指令格式、类型、操作以及对操作数的访问方式。相同的应用程序及操作系统二进制代码可以在相同ISA的不同计算机上运行。 31 | 32 | ISA通常由指令集合、处理器状态和例外三部分组成。 33 | 34 | 指令包含操作编码和操作数编码,操作编码指明操作类型,操作数编码指明操作对象。常见的指令编码方式包括复杂指令系统(Complex Instruction Set Computer,简称CISC),精简指令系统(Reduced Instruction Set Computer,简称RISC)和超长指令字(Very Long Instruction Word,简称VLIW)等。 35 | 36 | 指令的操作主要包括:运算指令,如加减乘除、逻辑运算、移位等;数据传送指令,如取数和存数;程序控制指令,如条件和非条件转移、函数调用和返回等;处理器状态控制指令,如系统调用指令、调试指令、同步指令等。 37 | 38 | 指令的操作数包括立即数、寄存器、存储器、IO设备寄存器等。立即数是指令中直接给出的数据。寄存器用于保存处理器最常用的数据,包括通用寄存器、浮点寄存器、控制寄存器等,处理器访问寄存器时直接在指令中指明要访问的寄存器号。存储器是计算机中保存指令和数据的场所,计算机取指令和存取数据都要先计算指令和数据所处的存储单元地址并根据地址来读写存储器。IO设备都有专门的设备控制器,设备控制器向处理器提供一组IO设备寄存器,处理器通过读写IO设备寄存器来获知IO设备状态并控制IO设备,处理器写入IO设备寄存器的数据,会被设备控制器解释成控制IO设备的命令。 39 | 40 | 指令需要明确操作数的数据表示、编址方式、寻址方式和定位方式等。数据表示给出指令系统可直接调用的数据类型,包括整数、实数、布尔值、字符等。编址方式给出编址单位、编址方法和地址空间等;编址单位有字编址、字节编址和位编址,普遍使用的是字节编址;常见的编址方法有大尾端(Big Endian)和小尾端(Little Endian)两种;地址空间包括寄存器空间、存储器空间和IO设备空间,有些ISA把存储器和IO设备统一编址,有些ISA把寄存器、存储器和IO设备统一编址。主要寻址方式有:立即数寻址、寄存器寻址、直接寻址、间接寻址、变址寻址(包括相对寻址和基址寻址)和堆栈寻址等。定位方式确定指令和数据的物理地址;直接定位方式在程序装入主存储器之前确定指令和数据的物理地址;静态定位方式在程序装入主存储器的过程中进行地址变换,确定指令和数据的物理地址;动态定位方式在程序执行过程中,当访问到相应的指令或数据时才进行地址变换,确定指令和数据的物理地址;现代计算机多采用动态定位方式。 41 | 42 | 通用计算机至少要有两种工作状态:核心态和用户态。两个状态下所能使用的指令和存储空间等硬件资源有差别。一般来说,只有操作系统才能工作在核心态,用户程序只能工作在用户态并可以通过例外和系统调用进入核心态。有些处理器有更多工作状态,如核心态(Kernel)、监督态(Hypervisor)、管理态(Supervisor)、用户态(User)等。 43 | 44 | 例外(Exception)系统是现代计算机的重要组成部分,除了管理外部设备之外,还承担了包括故障处理、实时处理、分时操作系统、程序的跟踪调试、程序的监测、用户程序与操作系统的联系等任务。发生例外时,处理器需要保存包括例外原因、例外指令的程序计数器内容等信息,把处理器状态切换为核心态并跳转到事先指定的操作系统例外处理入口地址;执行完例外处理程序后,处理器状态切换回发生例外前的状态并跳转回发生例外的指令继续执行。指令系统要指明例外源的分类组织、例外系统的软硬件功能分配、例外现场的保存和恢复、例外优先级、例外响应方式和屏蔽方式等。 45 | 46 | 47 | 48 | 3、计算机组织结构 49 | 50 | 计算机组织结构指计算机的组成部分及各部分之间的互连实现。典型计算机的基本组成包括CPU、存储器、IO设备,其中CPU包括运算器和控制器,IO设备包括输入设备和输出设备。计算机从输入设备接收程序和数据,存放在存储器中;CPU运行程序处理数据;最后将结果数据通过输出设备输出。 51 | 52 | 运算器包括算术和逻辑运算部件、移位部件、寄存器等。复杂运算如乘除法、开方及浮点运算可用程序实现或由运算器实现。寄存器既可用于保存数据,也可用于保存地址。运算器还可设置条件码寄存器等专用寄存器,条件码寄存器保存当前运算结果的状态,如运算结果是正数、负数或零,是否溢出等。 53 | 54 | 控制器控制指令流和每条指令的执行,内含程序计数器和指令寄存器等。程序计数器存放当前执行指令的地址,指令寄存器存放当前正在执行的指令。指令通过译码产生控制信号,用于控制运算器、存储器、IO设备的工作。这些控制信号可以用硬连线逻辑产生,也可以用微程序产生,也可以两者结合产生。为了获得高指令吞吐率,可以采用指令重叠执行的流水线技术,以及同时执行多条指令的超标量技术。当遇到执行时间较长或条件不具备的指令时,把条件具备的后续指令提前执行(称为乱序执行)可以提高流水线效率。控制器还产生一定频率的时钟脉冲,用于计算机各组成部分的同步。 55 | 56 | 存储器存储程序和数据,又称主存储器或内存,一般用动态随机存储器(Dynamic Random Access Memory,简称DRAM)实现。CPU可以直接访问它,IO设备也频繁地和它交换数据。存储器的存取速度往往满足不了CPU的快速要求,容量也满足不了应用的需要,为此将存储系统分为高速缓存(Cache)、主存储器和辅助存储器三个层次。Cache存放当前CPU最频繁访问的部分主存储器内容,可以采用比DRAM速度快但容量小的静态随机存储器(Static Random Access Memory,简称SRAM)实现。数据和指令在Cache和主存储器之间的调动由硬件自动完成。为扩大存储器容量,使用磁盘、磁带、光盘等能存储大量数据的存储器作为辅助存储器。计算机运行时所需的应用程序、系统软件和数据等都先存放在辅助存储器中,在运行过程中分批调入主存储器。数据和指令在主存储器和辅助存储器之间的调动由操作系统完成。CPU访问存储器时,面对的是一个高速(接近于Cache的速度)、大容量(接近于辅助存储器的容量)的存储器。现代计算机中还有少量只读存储器(Read Only Memory,简称ROM)用来存放引导程序和基本输入输出系统(Basic Input Output System,简称BIOS)等。现代计算机访问内存时采用虚拟地址,操作系统负责维护虚地址和物理地址转换的页表,集成在CPU中的存储管理部件(Memory Management Unit,简称MMU)负责把虚拟地址转换为物理地址。 57 | 58 | IO设备实现计算机和外部世界的信息交换。传统的IO设备有键盘、鼠标、打印机和显示器等;新型的IO设备能进行语音、图像、影视的输入输出和手写体文字输入,并支持计算机之间通过网络进行通信;磁盘等辅助存储器在计算机中也当作IO设备来管理。处理器通过读写IO设备控制器中的寄存器来访问及控制IO设备。高速IO设备可以在处理器安排下直接与主存储器成批交换数据,称为直接存储器访问(Directly Memory Access,简称DMA)。处理器可以通过查询设备控制器状态与IO设备进行同步,也可以通过中断与IO设备进行同步。 59 | 60 | 由若干个CPU、存储器和IO设备可以构成比单机性能更高的并行处理系统。 61 | 62 | 现代计算机各部件之间采用总线互连。为了便于不同厂家生产的设备能在一起工作以及设备的扩充,总线的标准化非常重要。常见的总线包括片上总线如AXI总线,系统总线如QPI和HT总线,内存总线如SDRAM总线,IO总线如PCIE、SATA、USB总线等。 63 | 64 | 65 | 66 | 4、微体系结构 67 | 68 | 半导体工艺的发展允许在单个芯片内部集成CPU,称为微处理器(Microprocessor)。微体系结构(简称微结构)是微处理器的组织结构,描述处理器的组成部分及其互连关系,以及这些组成部分及其互连如何实现指令系统的功能。对于同一个指令系统,复杂的微结构性能高,功耗和成本也高;简单的微结构性能低,功耗和成本也低。随着半导体工艺的不断发展,实现相同指令系统的处理器微结构不断升级并不断提高性能。 69 | 70 | 计算机执行指令一般包含以下过程:从存储器取指令并对取回的指令进行译码,从存储器或寄存器读取指令执行需要的操作数,执行指令,把执行结果写回存储器或寄存器。上述过程称为一个指令周期。计算机不断重复指令周期直到完成程序的执行。体系结构研究的一个永恒主题就是不断加速上述指令执行周期,从而提高计算机运行程序的效率。人们提出了很多提高指令执行效率的技术,包括RISC技术、指令流水线技术、高速缓存技术、转移预测技术、乱序执行技术、超标量(又称为多发射)技术等。 71 | 72 | RISC技术。自从1940年代发明电子计算机以来,处理器结构和指令系统经历了一个由简单到复杂,由复杂到简单,又由简单到复杂的否定之否定过程。早期的处理器结构及其指令系统由于工艺技术的限制,不可能做得很复杂。随着工艺技术的发展,1960年代后流水线技术、动态调度技术、向量机技术被广泛使用,处理器结构和指令系统变得复杂。1980年代提出的RISC技术通过减少指令数目、定长编码、降低编码密度等以简化指令的取指、译码、执行的逻辑以提高频率,通过增加寄存器数目及load-store结构以提高效率。后来随着深度流水、超标量、乱序执行的实现,RISC结构变得越来越复杂。 73 | 74 | RISC指令采用load-store结构,运算指令从寄存器读取操作数并把结果写回寄存器,访存指令则负责在寄存器和存储器间交换数据,运算指令和访存指令分别在不同的功能部件执行。在load-store结构中,运算器只需比较指令的寄存器号来判断指令间的数据相关,访存部件只需比较访存指令的地址来判断指令间的数据相关,从而支持高效的流水线、多发射及乱序执行技术。X86系列从Pentium III开始,把CISC指令翻译成若干RISC微操作以提高指令流水线效率,如Haswell微结构最多允许192个内部微操作乱序执行。 75 | 76 | 指令流水线技术。指令流水线把一条指令的执行划分为若干阶段(如分为取指、译码、执行、访存、写回阶段)来减少每个时钟周期的工作量,从而提高主频;并允许多条指令的不同阶段重叠执行实现并行处理(如一条指令处于执行阶段时,另一条指令处于译码阶段)。虽然同一条指令的执行时间没有变短,但处理器在单位时间内执行的指令数增加了。 77 | 78 | 指令流水线的执行单元包括算术和逻辑运算部件(Arithmetic Logic Units,简称ALU)、浮点运算部件(Floating Point Units,简称FPU)、向量运算部件、访存部件、转移部件等。这些部件在流水线的调度下具体执行指令规定的操作。运算部件的个数和延迟,访存部件的存储层次、容量和带宽,以及转移部件的转移猜测算法是决定微结构性能的重要因素。 79 | 80 | Cache技术。随着工艺技术的发展,处理器的运算速度和内存容量按摩尔定律的预测指数增加,但内存速度提高非常缓慢,与处理器速度的提高形成了“剪刀差”。 81 | 82 | 工艺技术的上述特点使得访存延迟成为以存储器为中心的冯诺依曼结构的主要瓶颈。Cache技术利用程序访问内存的时间局部性(一个单元如果当前被访问,则近期很有可能被访问)和空间局部性(一个单元被访问后,与之相邻的单元也很有可能被访问),使用速度较快、容量较小的Cache临时保存处理器常用的数据,使得处理器的多数访存操作可以在Cache上快速进行,只有少量访问Cache不命中的访存操作才访问内存。Cache是内存的映像,其内容是内存内容的子集,处理器访问Cache和访问内存使用相同的地址。从1980年代开始,RISC处理器就开始在处理器芯片内集成KB级的小容量Cache。现代处理器则普遍在片内集成多级Cache,典型的多核处理器每个处理器核一级指令和数据Cache各几十KB,二级Cache为几百KB,而多核共享的三级Cache为几MB到几十MB。 83 | 84 | Cache技术和指令流水线技术相得益彰。访问处理器片外内存的长延迟使流水线很难发挥作用,使用片内Cache可以有效降低流水线的访存时间,提高流水线效率。Cache容量越大,则流水线效率越高,处理器性能越高。 85 | 86 | 转移预测技术。冯诺依曼结构指令驱动执行的特点使转移指令成为提高流水线效率的瓶颈。典型应用程序平均每5-10条指令中就有一条转移指令,而转移指令的后续指令需要等待转移指令执行结果确定后才能取指,导致转移指令和后续指令之间不能重叠执行,降低了流水线效率。随着主频的提高,现代处理器流水线普遍在10-20级之间,由于转移指令引起的流水线阻塞成为提高指令流水线效率的重要瓶颈。 87 | 88 | 转移预测技术可以消除转移指令引起的指令流水线阻塞。转移预测器根据当前转移指令或其它转移指令的历史行为,在转移指令的取指或译码阶段预测该转移指令的跳转方向和目标地址并进行后续指令的取指。转移指令执行后,根据已经确定的跳转方向和目标地址对预测结果进行修正。如果发生转移预测错误,还需要取消指令流水线中的后续指令。为了提高预测精度并降低预测错误时的流水线开销,现代高性能处理器采用了复杂的转移预测器。 89 | 90 | 乱序执行技术。如果指令i是条长延迟指令,如除法指令或Cache不命中的访存指令,那么在顺序指令流水线中指令i后面的指令需要在流水线中等待很长时间。乱序执行技术通过指令动态调度允许指令i后面的源操作数准备好的指令越过指令i执行(需要使用指令i的运算结果的指令由于源操作数没有准备好,不会越过指令i执行),以提高指令流水线效率。为此,在指令译码之后的读寄存器阶段,判断指令需要的操作数是否准备好。如果操作数已经准备好,就进入执行阶段;如果操作数没有准备好,就进入称为保留站或者发射队列的队列中等待,直到操作数准备好后再进入执行阶段。为了保证执行结果符合程序规定的要求,乱序执行的指令需要有序结束。为此,执行完的指令均进入一个称为重排序缓存(Reorder Buffer,简称ROB)的队列,并把执行结果临时写入重命名寄存器。ROB根据指令进入流水线的次序有序提交指令的执行结果到目标寄存器或存储器。CDC6600和IBM 360/91分别使用计分板和保留站最早实现了指令的动态调度。 91 | 92 | 重命名寄存器与指令访问的结构寄存器相对应。为了避免多条指令访问同一个结构寄存器而使该寄存器成为串行化瓶颈,指令流水线可以把对该结构寄存器的访问定向到重命名寄存器。乱序执行流水线把指令执行结果写入重命名寄存器而不是结构寄存器,以避免破坏结构寄存器的内容,到顺序提交阶段再把重命名寄存器内容写入结构寄存器。两组执行不同运算但使用同一结构寄存器的指令可以使用不同的重命名寄存器,从而实现并行执行。 93 | 94 | 超标量。工艺技术的发展使得在1980年代后期出现了超标量处理器。超标量结构允许指令流水线的每一阶段同时处理多条指令。例如Alpha 21264处理器每拍可以取四条指令,发射六条指令,写回六条指令,提交11条指令。如果把单发射结构比作单车道马路,多发射结构就是多车道马路。 95 | 96 | 由于超标量结构的指令和数据通路都变宽了,使得寄存器端口、保留站端口、ROB端口、功能部件数都需要增加,例如Alpha 21264的寄存器堆有8个读端口和6个写端口,数据Cache的RAM通过倍频支持一拍两次访问。现代超标量处理器一般包含两个以上访存部件,两个以上定点运算部件以及两个以上浮点运算部件。超标量结构在指令译码或寄存器重命名时不仅要判断前后拍指令的数据相关,还需要判断同一拍中多条指令间的数据相关。 97 | 98 | 99 | 100 | 5、并行体系结构 101 | 102 | 并行体系结构是并行计算机系统的组织结构,通过把任务划分为多个进程或线程,让不同的处理器并行运行不同的进程或线程来提高性能。此外,随着处理器访存延迟的增加,Cache失效导致流水线长时间堵塞,处理器可以在一个线程等待长时间访存时快速切换到另一个线程执行以提高流水线效率。 103 | 104 | 多进程并行存在于多个操作系统之间或一个操作系统之内。用于高性能计算的MPI并行程序以及机群数据库是存在于多个操作系统之间的多进程并行的典型应用;由操作系统调度的多道程序则是操作系统之内多进程并行的典型应用。多线程并行只存在于一个操作系统之内。线程的粒度比进程小,线程的上下文也比进程简单。传统的多线程切换由操作系统调度并保留上下文,现代处理器通过硬件实现多份线程上下文来支持单周期的多线程切换。同时多线程(Simultaneous Multi-Threading,简称SMT)技术甚至允许超标量指令流水线的同一流水级同时运行来自不同线程的指令。现代处理器还通过硬件实现多份操作系统上下文来支持多个操作系统的快速切换,以提高云计算虚拟机的效率。 105 | 106 | 并行处理结构普遍存在于传统的大型机、服务器和高端工作站中。包含2-8个CPU芯片的小规模并行服务器和工作站一直是事务处理市场的主流产品。包含16-1024个CPU芯片的大型计算机在大型企业的信息系统中比较普遍。用于科学和工程计算的高性能计算机则往往包含上万个CPU芯片。随着集成电路集成度的不断提高,把多个CPU集成在单个芯片内部的多核CPU逐渐成为主流的CPU芯片产品。多核CPU芯片最早出现在嵌入式领域,把多个比较简单的CPU集成在一个芯片上。2005年个人计算机CPU芯片开始集成两个CPU核。现在的市场主流个人计算机CPU芯片一般集成2-4个CPU核,服务器CPU芯片则集成8-32个CPU核,专用处理器如GPU则集成几百到上千个处理核心。 107 | 108 | 并行处理系统通过互连网络把多个处理器连接成一个整体。常见的互连网络包括总线、交叉开关、环状网络、树形网络、二维或更多维网格等。并行系统的多个处理器之间需要同步机制来协同多处理器工作。常见的同步机制包括锁(Lock)、栅栏(Barrier)以及事务内存(Transaction Memory)等,计算机指令系统通常要设置专用的同步指令。 109 | 110 | 在共享存储的并行处理系统中,同一个内存单元(一般以Cache 行为单位)在不同的处理器中有多个备份,需要通过存储一致性模型(Memory Consistency Model)规定多个处理器访问共享内存的一致性标准。典型的存储一致性模型包括顺序一致性(Sequential Consistency),处理器一致性(Processor Consistency),弱一致性(Weak Consistency),释放一致性(Release Consistency)等。高速缓存一致性协议(Cache Coherence Protocol)把一个处理器新写的值传播给其它处理器,以达到存储一致性的目的。在侦听协议(Snoopy Protocol)中,写共享单元的处理器把写信息通过广播告知其它处理器;在基于目录的协议(Directory-based Protocol)中,每个存储单元对应一个目录项记录拥有该存储单元的副本的那些处理器号,写共享单元的处理器根据目录项的记录把写信息告知其它处理器。 111 | 112 | 113 | 114 | 6、体系结构的设计目标和方法 115 | 116 | 体系结构设计的主要指标包括性能、价格和功耗,其它指标包括安全性、可靠性、使用寿命等。体系结构设计的主要目标经历了大型机时代一味追求性能(Performance per Second),到个人计算机时代追求性能价格比(Performance per Dollar),再到移动互联时代追求性能功耗比(Performance per Watt)的转变。性能是计算机体系结构的首要设计目标。 117 | 118 | 性能的最本质定义是“完成一个或多个任务所需要的时间”。完成一个任务所需要的时间由完成该任务需要的指令数、完成每条指令需要的拍数以及每拍需要的时间三个量相乘得到。完成任务需要的指令数与算法、编译器和指令的功能有关;每条指令执行拍数(Cycles Per Instruction,简称CPI)或每拍执行指令数(Instructions Per Cycle简称IPC)与编译、指令功能、微结构设计相关;每拍需要的时间,也就是时钟周期,与微结构、电路设计、工艺等因素有关。 119 | 120 | 为了满足应用需求并不断提高性能,计算机体系结构在发展过程中遵循一些基本原则和方法,包括平衡性、局部性、并行性和虚拟化。 121 | 122 | 结构设计的第一个方法就是平衡设计。计算机是个复杂系统,影响性能的因素很多。结构设计要统筹兼顾,使各种影响性能的因素达到均衡。通用CPU设计有一个关于计算性能和访存带宽平衡的经验法则,即峰值浮点运算速度(MFLOPS)和峰值访存带宽(MB/s)为1:1左右。计算机体系结构中有一个著名的阿姆达尔(Amdahl)定律。该定律指出通过使用某种较快的执行方式所获得的性能的提高,受限于不可使用这种方式提高性能的执行时间所占总执行时间的百分比,例如一个程序的并行加速比,最终受限于不能被并行化的串行部分。 123 | 124 | 结构设计的第二个方法是利用局部性。当结构设计基本平衡以后,性能优化要抓主要矛盾,重点改进最频繁发生事件的执行效率。结构设计经常利用局部性加快经常性事件的速度。RISC指令系统利用指令的事件局部性对频繁发生的指令进行重点优化。硬件转移预测利用转移指令跳转方向的局部性,即同一条转移指令在执行时经常往同一个方向跳转。Cache和预取利用访存的时间和空间局部性优化性能。 125 | 126 | 结构设计的第三个方法是开发并行性。计算机中可以开发三种层次的并行性。第一个层次的并行性是指令级并行,包括时间并行即指令流水线,以及空间并行即超标量技术。1980年代RISC出现后,指令级并行开发达到了一个顶峰,2010年后进一步挖掘指令级并行的空间已经不大。第二个层次的并行性是数据级并行,主要指单指令流多数据流(Single Instruction Multiple Data,简称SIMD)的向量结构。二十世纪七、八十年代以Cray为代表的向量机十分流行;现代通用CPU普遍支持短向量运算,如X86的AVX指令支持256位短向量运算。第三个层次的并行性是任务级并行,包括进程级和线程级并行。上述三种并行性在现代计算机中都存在,多核CPU运行线程级或进程级并行的程序,每个核采用超标量流水线结构,并支持SIMD向量指令。 127 | 128 | 结构设计的第四个方法是虚拟化。所谓虚拟化,就是“用起来是这样的,实际上是那样的”,或者“逻辑上是这样的,物理上是那样的”。结构设计者宁愿自己多费事,也要尽量为用户提供一个友好的使用界面。如虚拟存储为每个进程提供独立的存储空间,虚实地址转换和物理内存分配都由CPU和操作系统自动完成,大大解放了程序员的生产力。多线程和虚拟机技术通过硬件支持多个线程上下文或操作系统上下文的快速切换,在一个CPU上“同时”运行多个线程或操作系统,把单个CPU虚拟成多个CPU。此外,流水线和多发射技术在维持串行编程模型的情况下提高了速度;Cache技术使程序员看到一个像Cache那么快,像内存那么大的存储空间;Cache一致性协议在分布式存储的情况下给程序员提供一个统一的存储空间;这些都是虚拟化方法的体现。 129 | 130 | \newpage 131 | -------------------------------------------------------------------------------- /40-references.Rmd: -------------------------------------------------------------------------------- 1 | # 参考文献 {#references .unnumbered} 2 | \markboth{参考文献}{参考文献} 3 | 4 |
5 | 6 | \newpage 7 | -------------------------------------------------------------------------------- /50-resources.Rmd: -------------------------------------------------------------------------------- 1 | # 相关资源 {-} 2 | \markboth{相关资源}{相关资源} 3 | 4 | ## 自动生成的各种格式 {-} 5 | 6 | * [HTML](https://foxsen.github.io/archbase). 在线HTML版本。 7 | * [PDF](https://foxsen.github.io/archbase/bookdown.pdf). PDF版下载链接。 8 | * [DOCX](https://foxsen.github.io/archbase/bookdown.docx). Word版下载链接,其中目录部分需要手工选择下“更新域”才能显示。 9 | 10 | ## 其他 {-} 11 | 12 | * 龙芯中科公司为本书提供了[官方网页](https://www.loongson.cn/LoongsonLab/OpenAccessLibrary)。 13 | * 机械工业出版社提供的[精排电子版](https://www.loongson.cn/pdf/computer.pdf)。 14 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | all: 2 | Rscript -e 'bookdown::render_book("index.Rmd", "all")' 3 | echo "done" 4 | 5 | html: 6 | Rscript -e 'bookdown::render_book()' 7 | 8 | pdf: 9 | Rscript -e 'bookdown::render_book("index.Rmd", "bookdown::pdf_book")' 10 | 11 | doc: 12 | Rscript -e 'bookdown::render_book("index.Rmd", "bookdown::word_document2")' 13 | 14 | serve: 15 | Rscript -e 'bookdown::serve_book()' 16 | 17 | clean: 18 | rm -rf _book _bookdown_files 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 计算机体系结构基础 2 | 3 | 这是龙芯团队胡伟武老师等人编写的《计算机体系结构基础》(第三版)的开源版本。本书纸质版本由机械工业出版社发行,可以通过各种常规渠道购买。 4 | 5 | ## 内容提要 6 | 7 | 本书由从事微处理器设计的一线科研人员编写而成。作者从微处理器设计的角度出发,充分考虑计算机体系结构的学科完整性,强调体系结构、基础软件、电路和器件的融会贯通。全书共分12章,包括指令系统结构、计算机硬件结构、CPU微结构、并行处理结构、计算机性能分析等主要内容,重点放在作为软硬件界面的指令系统结构,以及包含CPU、GPU、南北桥协同的计算机硬件结构。本书可作为高等学校“计算机体系结构”课程的本科生教材,同时也适合相关专业研究生或计算机技术人员参考阅读。 8 | 9 | 关于本书内容更多的介绍可以参考[推荐序](https://foxsen.github.io/archbase/%E6%8E%A8%E8%8D%90%E5%BA%8F.html)、[自序](https://foxsen.github.io/archbase/%E8%87%AA%E5%BA%8F.html)、[第三版序](https://foxsen.github.io/archbase/%E7%AC%AC%E4%B8%89%E7%89%88%E5%BA%8F.html)和[前言](https://foxsen.github.io/archbase/%E5%89%8D%E8%A8%80.html)等相关章节。 10 | 11 | ## 关于本书的开源维护 12 | 13 | 在第三版的改版过程中,作者们引入了一个创新尝试,试图将本书打造为一本活的教科书。具体来说,我们采用以文本为基础的rmarkdown格式编辑书本内容(采用[bookdown](https://bookdown.org)工具包),用git对其进行版本管理,并在互联网进行开源维护。在相应的网站上,还会提供出版社提供的与纸质版本一致的电子版本,以及相关的参考课件PPT和其他补充资源。我们认为这么做有几个好处: 14 | 15 | * 文字、图片和参考课件等素材的开放更方便教学使用。通过开源本书,我们期望能够它得到更广泛的采用,得到更多的批评指正意见,使得它能够更快成熟。 16 | * 方便的版本管理系统有助于及时吸收对本书的勘误和改进。一方面,读者可以通过项目的问题管理系统或者其他渠道反馈问题,被接纳后会立即反映到在线的版本中,不必等待下一次改版印刷周期。另一方面,作者们也可以将之前对由于时间仓促未来得及完善的内容进行补充完善,或者根据产业的发展需求对内容进行适当调整。 17 | * 新的格式能够提供更丰富的表现形式。在rmarkdown文本的基础上,系统可以自动生成HTML、word和PDF等各种格式的发布版本,扩大适用范围。后续还可以利用其中某些格式来实现传统纸质书本无法做到的实时交互等功能。 当然,限于rmarkdown/bookdown目前的表现能力以及作者们对其的应用水平,在线版本生成的发布版本排版细节质量上很可能比不上出版社提供的、与纸质版本一致的原始电子文件,阅读体验上也不能替代纸质版本。有条件的读者仍然可以选择由机械工业出版社出版发行的纸质版本。 18 | 19 | 由于工具的限制,在线版本和纸质版本的版面效果并非完全一致。目前图表的编号也不一定一一对应,部分纸质书的表可能用图来代替。后续随着一些修订内容的添加,在线版本的文字和纸质版本也会有所差别。 20 | 21 | 本书内容的开源离不开出版社、龙芯中科技术股份有限公司和作者们的支持,在此表示感谢。出版社提供了精心排版后的电子版本和相应资源文件,并同意开放这些资源。龙芯中科技术股份有限公司提供了在线版本的一份web服务器资源以及部分经费支持。作者们接受了可能的出版收益损失。 22 | 23 | 本书开源版本也得到了中国科学院大学研究生程轶涵、穆热迪力、王铭剑、徐淮、叶锦鹏(按姓氏拼音顺序)等同学的大力支持,他们协助完成了bookdown格式部分源代码的编辑和校对,在此表示感谢! 24 | 25 | ## 本书相关信息 26 | 27 | 本书的官方信息网页参见[本书信息](https://www.loongson.cn/LoongsonLab/OpenAccessLibrary)。 28 | 29 | 本项目的github actions已经配置为自动生成HTML/PDF/DOCX三种输出格式并部署到github pages。三种格式的链接分别如下: 30 | 31 | * [HTML](https://foxsen.github.io/archbase). 在线HTML版本。 32 | * [PDF](https://foxsen.github.io/archbase/bookdown.pdf). PDF版下载链接。 33 | * [DOCX](https://foxsen.github.io/archbase/bookdown.docx). Word版下载链接,其中目录部分需要手工选择下“更新域”才能显示。 34 | 35 | 机械工业出版社提供的纸质书精排电子版可以从这里获得: [纸质书电子版](https://www.loongson.cn/pdf/computer.pdf)。 36 | 37 | ## docker环境 38 | 39 | 虽然github actions已经能够全自动地完成代码编译和部署,不过似乎它的环境不太容易在本地复现。为了方便大家复现我们的工作环境,写了一个简单的Dockerfile(参见docker/Dockerfile),它安装了能够完整编译本项目代码的相关软件工具。 40 | 41 | 使用方法: 42 | 43 | * 安装docker环境。 44 | * cd docker && sudo docker build -t bookdown . 45 | * docker run -it bookdown /bin/bash,然后在docker环境中可以更新代码,编译代码。例如: cd /opt/archbase; git pull; make 46 | 47 | 有兴趣的读者可以参考这个环境来编写自己的书籍或者其他文档,然后大家可以切磋具体的使用方法和技巧。 我们也都是bookdown新手,估计有很多用法有改进的空间,期待得到大家的反馈。 48 | 49 | ## 龙芯体系结构相关参考资源 50 | 51 | 本书的实例和原理介绍以龙芯体系结构为主。关于龙芯体系结构的信息,可以参考[这里](https://github.com/loongson)。那里的内容包括: 52 | 53 | 1. 龙芯架构的相关[文档](https://github.com/loongson/LoongArch-Documentation),如指令集手册、ABI文档、龙芯3A5000处理器手册、龙芯7A1000桥片手册等。 54 | 2. 一些龙芯架构的关键基础软件,如[工具链](https://github.com/loongson/build-tools)、[QEMU模拟器](https://github.com/foxsen/qemu-loongarch-runenv)和[内核](https://github.com/loongson/linux/tree/loongarch-next)等。很多软件正在upstream的过程中,相信不久后大部分软件可以直接从社区上游获得。 55 | 56 | 暂时没有龙芯机器的同学,可以在X86上用交叉编译工具链编译loongarch应用,用qemu模拟运行loongarch程序。后续争取提供一些龙芯云端的开发者账号让大家能在真机上做实验。 57 | 58 | ## 意见反馈 59 | 60 | 提供开源版本的一个主要目的是为了更好地收集反馈意见。如果您对本书有任何意见或者建议,欢迎与我们联系。您可以利用github的各种交互功能与我们联系:提交issue、pull request或者私信作者等。 61 | 62 | ## TODO 63 | 64 | 后续还有很多需要完善的工作,包括: 65 | 66 | * 完善教材内容。例如为正文涉及的一些知识提供更多的参考阅读指引,为部分习题添加必要的上下文交代,修正不够严谨的表述等等。 67 | * 整理和上传相关资料,如纸质版对应的pdf版本、参考课件、习题涉及的一些外部资源和运行环境等。 68 | * 持续完善开源版本的格式和自动生成环境。目前通过github action,对源代码的任何修改推送之后将触发HTML/PDF/DOCX版本的自动编译和部署。我们发现缺省的bookdown环境以及我们用到的一些包还存在一定的不足,导致生成的内容还有些异常,包括部分图表超宽、表格内的换行或者tab键处理不如预期等。其中一些问题已经被整理和集成到部署环境中。其他的遗留问题也会通过修正相关软件包或者更换正文的表达方式来逐步解决。 69 | 70 | ## License 71 | 72 | 本书采用[Creative Commons Attribution-NonCommercial 4.0 International Public License](https://creativecommons.org/licenses/by-nc/4.0/legalcode)开源,具体条款可参考LICENSE文件。 73 | -------------------------------------------------------------------------------- /_bookdown.yml: -------------------------------------------------------------------------------- 1 | book_filename: bookdown 2 | clean: [bookdown.bbl] 3 | delete_merged_file: true 4 | language: 5 | label: 6 | fig: "图 " 7 | tab: "表 " 8 | ui: 9 | edit: "编辑" 10 | chapter_name: ["第 ", " 章"] 11 | part_name: ["第 ", " 部分"] 12 | -------------------------------------------------------------------------------- /_output.yml: -------------------------------------------------------------------------------- 1 | bookdown::gitbook: 2 | css: css/style.css 3 | config: 4 | toc: 5 | collapse: none 6 | before: | 7 |
  • 计算机体系结构基础
  • 8 | after: | 9 |
  • 本书电子版由龙芯中科赞助提供
  • 10 | download: [pdf, docx] 11 | sharing: 12 | github: yes 13 | facebook: no 14 | pandoc_args: "--variable=lang:zh-CN" 15 | bookdown::pdf_book: 16 | includes: 17 | in_header: latex/preamble.tex 18 | before_body: latex/before_body.tex 19 | after_body: latex/after_body.tex 20 | keep_tex: yes 21 | dev: "cairo_pdf" 22 | latex_engine: xelatex 23 | # citation_package: natbib 24 | template: latex/template.tex 25 | pandoc_args: "--top-level-division=chapter" 26 | toc_depth: 3 27 | toc_unnumbered: no 28 | toc_appendix: yes 29 | quote_footer: ["\\begin{flushright}", "\\end{flushright}"] 30 | bookdown::epub_book: 31 | stylesheet: css/style.css 32 | bookdown::word_document2: 33 | reference_docx: ./word/template.docx 34 | toc: true 35 | -------------------------------------------------------------------------------- /chinese-gb7714-2005-numeric.csl: -------------------------------------------------------------------------------- 1 | 2 | 214 | -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | p.caption { 2 | color: #777; 3 | margin-top: 10px; 4 | } 5 | p code { 6 | white-space: inherit; 7 | } 8 | pre { 9 | word-break: normal; 10 | word-wrap: normal; 11 | } 12 | pre code { 13 | white-space: inherit; 14 | } 15 | p.flushright { 16 | text-align: right; 17 | } 18 | blockquote > p:last-child { 19 | text-align: right; 20 | } 21 | blockquote > p:first-child { 22 | text-align: inherit; 23 | } 24 | 25 | .cols {display: flex; } 26 | .width48 {width: 48%; } 27 | .width4 {width: 4%; } 28 | -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | from ubuntu:20.04 2 | 3 | # select faster mirror 4 | RUN sed -i -e 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list 5 | 6 | RUN DEBIAN_FRONTEND=noninteractive apt-get update 7 | 8 | # install necessary packages 9 | RUN DEBIAN_FRONTEND=noninteractive apt-get install -y git r-base-core vim 10 | 11 | # they are needed to build r packages via renv::restore() 12 | RUN DEBIAN_FRONTEND=noninteractive apt-get install -y libxml2-dev \ 13 | libfontconfig1-dev libfreetype-dev libcairo2-dev 14 | RUN Rscript -e "install.packages('renv')" 15 | 16 | # use renv to recover r environment 17 | RUN cd /opt && git clone --depth 1 https://github.com/foxsen/archbase && cd archbase 18 | RUN cd /opt/archbase && Rscript -e "renv::restore()" 19 | 20 | # install tinytex environment for make pdf 21 | RUN Rscript -e "renv::install('tinytex')" 22 | RUN Rscript -e "tinytex::install_tinytex()" 23 | 24 | # install Chinese fonts, flextable need used fonts to calculate table width 25 | RUN DEBIAN_FRONTEND=noninteractive apt-get install -y fonts-noto-cjk 26 | 27 | # set Chinese locale 28 | RUN apt-get install -y locales 29 | RUN sed -i -e 's/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/' /etc/locale.gen && \ 30 | locale-gen 31 | ENV LC_ALL zh_CN.UTF-8 32 | 33 | # install pandoc 2.11 34 | RUN DEBIAN_FRONTEND=noninteractive apt-get install -y wget 35 | RUN wget -c https://github.com/jgm/pandoc/releases/download/2.11.4/pandoc-2.11.4-1-amd64.deb && \ 36 | dpkg -i ./pandoc-2.11.4-1-amd64.deb && \ 37 | rm -f ./pandoc-2.11.4-1-amd64.deb 38 | 39 | RUN export PATH=$PATH:/root/bin && cd /opt/archbase && make pdf 40 | 41 | WORKDIR /opt/archbase 42 | ENV PATH="$PATH:/root/bin" 43 | -------------------------------------------------------------------------------- /images/by-nc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/by-nc.png -------------------------------------------------------------------------------- /images/chapter1/1-1.eps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter1/1-1.eps -------------------------------------------------------------------------------- /images/chapter1/china_design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter1/china_design.png -------------------------------------------------------------------------------- /images/chapter1/device_to_chip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter1/device_to_chip.png -------------------------------------------------------------------------------- /images/chapter1/hierarchy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter1/hierarchy.png -------------------------------------------------------------------------------- /images/chapter1/ic_develop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter1/ic_develop.png -------------------------------------------------------------------------------- /images/chapter1/power.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter1/power.png -------------------------------------------------------------------------------- /images/chapter10/MPI的6个基本的函数-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/MPI的6个基本的函数-01.png -------------------------------------------------------------------------------- /images/chapter10/MPI的6个基本的函数.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/MPI的6个基本的函数.ai -------------------------------------------------------------------------------- /images/chapter10/SISD_SIMD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/SISD_SIMD.png -------------------------------------------------------------------------------- /images/chapter10/Shared_storage_and_message_passing_programming.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/Shared_storage_and_message_passing_programming.png -------------------------------------------------------------------------------- /images/chapter10/shared_task.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/shared_task.png -------------------------------------------------------------------------------- /images/chapter10/矩阵乘法算法示意-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/矩阵乘法算法示意-01.png -------------------------------------------------------------------------------- /images/chapter10/矩阵乘法算法示意.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/矩阵乘法算法示意.ai -------------------------------------------------------------------------------- /images/chapter10/积分求圆周率算法示意-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/积分求圆周率算法示意-01.png -------------------------------------------------------------------------------- /images/chapter10/积分求圆周率算法示意.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/积分求圆周率算法示意.ai -------------------------------------------------------------------------------- /images/chapter10/线程同步.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/线程同步.ai -------------------------------------------------------------------------------- /images/chapter10/线程同步.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/线程同步.png -------------------------------------------------------------------------------- /images/chapter10/线程管理-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/线程管理-01.png -------------------------------------------------------------------------------- /images/chapter10/线程管理.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/线程管理.ai -------------------------------------------------------------------------------- /images/chapter10/编译制导语言-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/编译制导语言-01.png -------------------------------------------------------------------------------- /images/chapter10/编译制导语言.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter10/编译制导语言.ai -------------------------------------------------------------------------------- /images/chapter11/11-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/11-16.png -------------------------------------------------------------------------------- /images/chapter11/11-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/11-17.png -------------------------------------------------------------------------------- /images/chapter11/11-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/11-18.png -------------------------------------------------------------------------------- /images/chapter11/11-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/11-24.png -------------------------------------------------------------------------------- /images/chapter11/11-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/11-3.png -------------------------------------------------------------------------------- /images/chapter11/cache_structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/cache_structure.png -------------------------------------------------------------------------------- /images/chapter11/cell_arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/cell_arch.png -------------------------------------------------------------------------------- /images/chapter11/centralized_barrier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/centralized_barrier.png -------------------------------------------------------------------------------- /images/chapter11/cuda_core.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/cuda_core.png -------------------------------------------------------------------------------- /images/chapter11/different_results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/different_results.png -------------------------------------------------------------------------------- /images/chapter11/dir_invld.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/dir_invld.png -------------------------------------------------------------------------------- /images/chapter11/esi_transit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/esi_transit.png -------------------------------------------------------------------------------- /images/chapter11/fermi_mem_hierarchy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/fermi_mem_hierarchy.png -------------------------------------------------------------------------------- /images/chapter11/flow_control_method.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/flow_control_method.png -------------------------------------------------------------------------------- /images/chapter11/interconnect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/interconnect.png -------------------------------------------------------------------------------- /images/chapter11/la464_uarch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/la464_uarch.png -------------------------------------------------------------------------------- /images/chapter11/ll_sc_atomic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/ll_sc_atomic.png -------------------------------------------------------------------------------- /images/chapter11/ls3a5000_arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/ls3a5000_arch.png -------------------------------------------------------------------------------- /images/chapter11/ls3a5000_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/ls3a5000_layout.png -------------------------------------------------------------------------------- /images/chapter11/noc_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/noc_example.png -------------------------------------------------------------------------------- /images/chapter11/nuca_interconnect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/nuca_interconnect.png -------------------------------------------------------------------------------- /images/chapter11/router_struct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/router_struct.png -------------------------------------------------------------------------------- /images/chapter11/sandybridge_arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/sandybridge_arch.png -------------------------------------------------------------------------------- /images/chapter11/shared_llc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/shared_llc.png -------------------------------------------------------------------------------- /images/chapter11/sm_single.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/sm_single.png -------------------------------------------------------------------------------- /images/chapter11/sm_whole.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/sm_whole.png -------------------------------------------------------------------------------- /images/chapter11/test_and_set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/test_and_set.png -------------------------------------------------------------------------------- /images/chapter11/tile64_arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/tile64_arch.png -------------------------------------------------------------------------------- /images/chapter11/topo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter11/topo.png -------------------------------------------------------------------------------- /images/chapter12/3A5000和对比处理器的各级Cache和内存访问延迟数据-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter12/3A5000和对比处理器的各级Cache和内存访问延迟数据-01.png -------------------------------------------------------------------------------- /images/chapter12/Nehalem平台中显示的perf list输出-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter12/Nehalem平台中显示的perf list输出-01.png -------------------------------------------------------------------------------- /images/chapter12/Perf的工作原理图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter12/Perf的工作原理图.png -------------------------------------------------------------------------------- /images/chapter12/功能部件操作延迟-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter12/功能部件操作延迟-01.png -------------------------------------------------------------------------------- /images/chapter12/基于跳步访问的3A5000和Zen1、Skylake各级延迟的比较(cycles).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter12/基于跳步访问的3A5000和Zen1、Skylake各级延迟的比较(cycles).png -------------------------------------------------------------------------------- /images/chapter12/基于随机访问的3A5000和Zen1、Skylake各级延迟的比较(cycles).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter12/基于随机访问的3A5000和Zen1、Skylake各级延迟的比较(cycles).png -------------------------------------------------------------------------------- /images/chapter12/微基准测试程序集-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter12/微基准测试程序集-01.png -------------------------------------------------------------------------------- /images/chapter12/访存操作的并发性.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter12/访存操作的并发性.png -------------------------------------------------------------------------------- /images/chapter2/csr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter2/csr.png -------------------------------------------------------------------------------- /images/chapter2/hierarchy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter2/hierarchy.png -------------------------------------------------------------------------------- /images/chapter2/inst_coding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter2/inst_coding.png -------------------------------------------------------------------------------- /images/chapter2/isa-compare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter2/isa-compare.png -------------------------------------------------------------------------------- /images/chapter2/loongarch-coding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter2/loongarch-coding.png -------------------------------------------------------------------------------- /images/chapter2/lwl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter2/lwl.png -------------------------------------------------------------------------------- /images/chapter2/page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter2/page.png -------------------------------------------------------------------------------- /images/chapter2/seg-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter2/seg-page.png -------------------------------------------------------------------------------- /images/chapter2/segment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter2/segment.png -------------------------------------------------------------------------------- /images/chapter3/crmd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter3/crmd.png -------------------------------------------------------------------------------- /images/chapter3/csr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter3/csr.png -------------------------------------------------------------------------------- /images/chapter3/memcpy_program.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter3/memcpy_program.png -------------------------------------------------------------------------------- /images/chapter3/page_table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter3/page_table.png -------------------------------------------------------------------------------- /images/chapter3/tlb_convert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter3/tlb_convert.png -------------------------------------------------------------------------------- /images/chapter3/tlb_entry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter3/tlb_entry.png -------------------------------------------------------------------------------- /images/chapter3/tlb_reg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter3/tlb_reg.png -------------------------------------------------------------------------------- /images/chapter4/address_space.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter4/address_space.png -------------------------------------------------------------------------------- /images/chapter4/as_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter4/as_example.png -------------------------------------------------------------------------------- /images/chapter4/stack_frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter4/stack_frame.png -------------------------------------------------------------------------------- /images/chapter5/3A3000_display.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/3A3000_display.png -------------------------------------------------------------------------------- /images/chapter5/3A3000_display1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/3A3000_display1.png -------------------------------------------------------------------------------- /images/chapter5/3A3000_display2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/3A3000_display2.png -------------------------------------------------------------------------------- /images/chapter5/3A3000_display3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/3A3000_display3.png -------------------------------------------------------------------------------- /images/chapter5/3A3000_display4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/3A3000_display4.png -------------------------------------------------------------------------------- /images/chapter5/bht_loop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/bht_loop.png -------------------------------------------------------------------------------- /images/chapter5/disk_structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/disk_structure.png -------------------------------------------------------------------------------- /images/chapter5/dram_cell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/dram_cell.png -------------------------------------------------------------------------------- /images/chapter5/loongson_3A3000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/loongson_3A3000.png -------------------------------------------------------------------------------- /images/chapter5/sdram_structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/sdram_structure.png -------------------------------------------------------------------------------- /images/chapter5/soc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/soc.png -------------------------------------------------------------------------------- /images/chapter5/storage_hierarchy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/storage_hierarchy.png -------------------------------------------------------------------------------- /images/chapter5/structure_2part.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/structure_2part.png -------------------------------------------------------------------------------- /images/chapter5/structure_3part.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/structure_3part.png -------------------------------------------------------------------------------- /images/chapter5/structure_3part_weaknb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/structure_3part_weaknb.png -------------------------------------------------------------------------------- /images/chapter5/structure_4part.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/structure_4part.png -------------------------------------------------------------------------------- /images/chapter5/von_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter5/von_architecture.png -------------------------------------------------------------------------------- /images/chapter6/ahb_apb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/ahb_apb.png -------------------------------------------------------------------------------- /images/chapter6/axi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/axi.png -------------------------------------------------------------------------------- /images/chapter6/axi_interconnect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/axi_interconnect.png -------------------------------------------------------------------------------- /images/chapter6/burst_read.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/burst_read.png -------------------------------------------------------------------------------- /images/chapter6/command_after.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/command_after.png -------------------------------------------------------------------------------- /images/chapter6/command_before.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/command_before.png -------------------------------------------------------------------------------- /images/chapter6/ddr2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/ddr2.png -------------------------------------------------------------------------------- /images/chapter6/ddr2_state.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/ddr2_state.png -------------------------------------------------------------------------------- /images/chapter6/ddr3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/ddr3.png -------------------------------------------------------------------------------- /images/chapter6/ddr3_read.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/ddr3_read.png -------------------------------------------------------------------------------- /images/chapter6/ddr3_write.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/ddr3_write.png -------------------------------------------------------------------------------- /images/chapter6/ht_interconnect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/ht_interconnect.png -------------------------------------------------------------------------------- /images/chapter6/ht_transfer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/ht_transfer.png -------------------------------------------------------------------------------- /images/chapter6/ht_two_chips.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/ht_two_chips.png -------------------------------------------------------------------------------- /images/chapter6/jz_m200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/jz_m200.png -------------------------------------------------------------------------------- /images/chapter6/loongson_4way.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/loongson_4way.png -------------------------------------------------------------------------------- /images/chapter6/overlapped_read.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/overlapped_read.png -------------------------------------------------------------------------------- /images/chapter6/pci_interconnect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/pci_interconnect.png -------------------------------------------------------------------------------- /images/chapter6/pci_signals.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/pci_signals.png -------------------------------------------------------------------------------- /images/chapter6/pcie_interconnect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/pcie_interconnect.png -------------------------------------------------------------------------------- /images/chapter6/pcie_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/pcie_location.png -------------------------------------------------------------------------------- /images/chapter6/pcie_packet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/pcie_packet.png -------------------------------------------------------------------------------- /images/chapter6/read_structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/read_structure.png -------------------------------------------------------------------------------- /images/chapter6/sdram_timing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/sdram_timing.png -------------------------------------------------------------------------------- /images/chapter6/write_structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/write_structure.png -------------------------------------------------------------------------------- /images/chapter6/write_transaction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter6/write_transaction.png -------------------------------------------------------------------------------- /images/chapter7/bar_reg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter7/bar_reg.png -------------------------------------------------------------------------------- /images/chapter7/boot_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter7/boot_flow.png -------------------------------------------------------------------------------- /images/chapter7/bus_access_type.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter7/bus_access_type.png -------------------------------------------------------------------------------- /images/chapter7/config_reg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter7/config_reg.png -------------------------------------------------------------------------------- /images/chapter7/l1_dcache.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter7/l1_dcache.png -------------------------------------------------------------------------------- /images/chapter8/16bit_CLA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/16bit_CLA.png -------------------------------------------------------------------------------- /images/chapter8/16bit_multiplying_unit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/16bit_multiplying_unit.png -------------------------------------------------------------------------------- /images/chapter8/1bit_full_adder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/1bit_full_adder.png -------------------------------------------------------------------------------- /images/chapter8/1bit_full_adder_circuit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/1bit_full_adder_circuit.png -------------------------------------------------------------------------------- /images/chapter8/1bit_wallace_tree_for8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/1bit_wallace_tree_for8.png -------------------------------------------------------------------------------- /images/chapter8/32bit_CLA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/32bit_CLA.png -------------------------------------------------------------------------------- /images/chapter8/32bit_RCA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/32bit_RCA.png -------------------------------------------------------------------------------- /images/chapter8/4bit_CLA(include carry factor).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/4bit_CLA(include carry factor).png -------------------------------------------------------------------------------- /images/chapter8/4bit_CLA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/4bit_CLA.png -------------------------------------------------------------------------------- /images/chapter8/4bit_comparer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/4bit_comparer.png -------------------------------------------------------------------------------- /images/chapter8/4bit_shifter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/4bit_shifter.png -------------------------------------------------------------------------------- /images/chapter8/8-19A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/8-19A.png -------------------------------------------------------------------------------- /images/chapter8/8-21a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/8-21a.png -------------------------------------------------------------------------------- /images/chapter8/8-22a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/8-22a.png -------------------------------------------------------------------------------- /images/chapter8/Booth_multiplication with shifter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/Booth_multiplication with shifter.png -------------------------------------------------------------------------------- /images/chapter8/Booth_partial_product.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/Booth_partial_product.png -------------------------------------------------------------------------------- /images/chapter8/Booth_select_logic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/Booth_select_logic.png -------------------------------------------------------------------------------- /images/chapter8/Booth_selectsignal_logic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/Booth_selectsignal_logic.png -------------------------------------------------------------------------------- /images/chapter8/Booth_two_multiplication.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/Booth_two_multiplication.png -------------------------------------------------------------------------------- /images/chapter8/CMOS_D_Flip-Flop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/CMOS_D_Flip-Flop.png -------------------------------------------------------------------------------- /images/chapter8/CMOS_NAND_gate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/CMOS_NAND_gate.png -------------------------------------------------------------------------------- /images/chapter8/CMOS_NOR_gate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/CMOS_NOR_gate.png -------------------------------------------------------------------------------- /images/chapter8/CMOS_NOT_gate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/CMOS_NOT_gate.png -------------------------------------------------------------------------------- /images/chapter8/CMOS_TRANS_gate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/CMOS_TRANS_gate.png -------------------------------------------------------------------------------- /images/chapter8/CMOS_inverter_delay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/CMOS_inverter_delay.png -------------------------------------------------------------------------------- /images/chapter8/D_latch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/D_latch.png -------------------------------------------------------------------------------- /images/chapter8/Dlatch_timing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/Dlatch_timing.png -------------------------------------------------------------------------------- /images/chapter8/FULL_adder for four 4bit number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/FULL_adder for four 4bit number.png -------------------------------------------------------------------------------- /images/chapter8/FULL_adder for three 4bit number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/FULL_adder for three 4bit number.png -------------------------------------------------------------------------------- /images/chapter8/IEEE754_float.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/IEEE754_float.png -------------------------------------------------------------------------------- /images/chapter8/MOS_structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/MOS_structure.png -------------------------------------------------------------------------------- /images/chapter8/MOS_switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/MOS_switch.png -------------------------------------------------------------------------------- /images/chapter8/NMOS_workingprinciple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/NMOS_workingprinciple.png -------------------------------------------------------------------------------- /images/chapter8/RS_latch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/RS_latch.png -------------------------------------------------------------------------------- /images/chapter8/WORONG_exaxple of walllace tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/WORONG_exaxple of walllace tree.png -------------------------------------------------------------------------------- /images/chapter8/booth_one_multiplication.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/booth_one_multiplication.png -------------------------------------------------------------------------------- /images/chapter8/clock_signal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/clock_signal.png -------------------------------------------------------------------------------- /images/chapter8/complement_multiplication.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/complement_multiplication.png -------------------------------------------------------------------------------- /images/chapter8/hw logic gate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/hw logic gate.png -------------------------------------------------------------------------------- /images/chapter8/hwCMOS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/hwCMOS.png -------------------------------------------------------------------------------- /images/chapter8/iterative_complement_multipilier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/iterative_complement_multipilier.png -------------------------------------------------------------------------------- /images/chapter8/iterative_sourcecode_multipilier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/iterative_sourcecode_multipilier.png -------------------------------------------------------------------------------- /images/chapter8/logic_gate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/logic_gate.png -------------------------------------------------------------------------------- /images/chapter8/sicicium_atomic_structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/sicicium_atomic_structure.png -------------------------------------------------------------------------------- /images/chapter8/subtracter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter8/subtracter.png -------------------------------------------------------------------------------- /images/chapter9/BTB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/BTB.png -------------------------------------------------------------------------------- /images/chapter9/LS3A2000.emf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/LS3A2000.emf -------------------------------------------------------------------------------- /images/chapter9/LS3A3000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/LS3A3000.png -------------------------------------------------------------------------------- /images/chapter9/PHT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/PHT.png -------------------------------------------------------------------------------- /images/chapter9/brachRelation.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/brachRelation.ai -------------------------------------------------------------------------------- /images/chapter9/brachRelation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/brachRelation.png -------------------------------------------------------------------------------- /images/chapter9/cache.emf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/cache.emf -------------------------------------------------------------------------------- /images/chapter9/cache.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/cache.png -------------------------------------------------------------------------------- /images/chapter9/cacheMap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/cacheMap.png -------------------------------------------------------------------------------- /images/chapter9/cacheMapStruct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/cacheMapStruct.png -------------------------------------------------------------------------------- /images/chapter9/componentflow.emf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/componentflow.emf -------------------------------------------------------------------------------- /images/chapter9/componentflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/componentflow.png -------------------------------------------------------------------------------- /images/chapter9/componentflowWithStall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/componentflowWithStall.png -------------------------------------------------------------------------------- /images/chapter9/ctrlHazard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/ctrlHazard.png -------------------------------------------------------------------------------- /images/chapter9/ctrlHazardFlow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/ctrlHazardFlow.png -------------------------------------------------------------------------------- /images/chapter9/ctrlHazardFlow1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/ctrlHazardFlow1.png -------------------------------------------------------------------------------- /images/chapter9/ctrlHazardStruct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/ctrlHazardStruct.png -------------------------------------------------------------------------------- /images/chapter9/datapathWithClk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/datapathWithClk.png -------------------------------------------------------------------------------- /images/chapter9/decode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/decode.png -------------------------------------------------------------------------------- /images/chapter9/dualIssue.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/dualIssue.ai -------------------------------------------------------------------------------- /images/chapter9/dualIssue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/dualIssue.png -------------------------------------------------------------------------------- /images/chapter9/dynamic.emf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/dynamic.emf -------------------------------------------------------------------------------- /images/chapter9/dynamic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/dynamic.png -------------------------------------------------------------------------------- /images/chapter9/dynamic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/dynamic1.png -------------------------------------------------------------------------------- /images/chapter9/forwarding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/forwarding.png -------------------------------------------------------------------------------- /images/chapter9/instHazardPipeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/instHazardPipeline.png -------------------------------------------------------------------------------- /images/chapter9/multicycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/multicycle.png -------------------------------------------------------------------------------- /images/chapter9/multicycleflow.emf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/multicycleflow.emf -------------------------------------------------------------------------------- /images/chapter9/multicycleflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/multicycleflow.png -------------------------------------------------------------------------------- /images/chapter9/pipelineflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/pipelineflow.png -------------------------------------------------------------------------------- /images/chapter9/pipelinestruct.emf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/pipelinestruct.emf -------------------------------------------------------------------------------- /images/chapter9/pipelinestruct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/pipelinestruct.png -------------------------------------------------------------------------------- /images/chapter9/raw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/raw.png -------------------------------------------------------------------------------- /images/chapter9/simpleCPUdatapath.emf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/simpleCPUdatapath.emf -------------------------------------------------------------------------------- /images/chapter9/simpleCPUdatapath.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/simpleCPUdatapath.png -------------------------------------------------------------------------------- /images/chapter9/stallflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/chapter9/stallflow.png -------------------------------------------------------------------------------- /images/foreword/liguojie_sign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/images/foreword/liguojie_sign.png -------------------------------------------------------------------------------- /index.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "计算机体系结构基础" 3 | subtitle: "第3版" 4 | author: 5 | - 胡伟武\ 汪文祥\ 苏孟豪\ 张福新\ 王焕东\ 章隆兵\ 6 | 肖俊华\ 刘\ 苏\ 陈新科\ 吴瑞阳\ 李晓钰\ 高燕萍 7 | date: "`r Sys.Date()`" 8 | documentclass: ctexbook 9 | bibliography: [book.bib] 10 | #biblio-style: apalike 11 | #biblio-style: GBT7714-2015 12 | csl: chinese-gb7714-2005-numeric.csl 13 | link-citations: yes 14 | nocite: '@*' 15 | colorlinks: yes 16 | lot: yes 17 | lof: yes 18 | geometry: [letterpaper, tmargin=2.5cm, bmargin=2.5cm, lmargin=3.5cm, rmargin=2.5cm] 19 | site: bookdown::bookdown_site 20 | description: "计算机体系结构基础" 21 | github-repo: foxsen/archbase 22 | #cover-image: images/cover.jpg 23 | --- 24 | 25 | ```{r setup, include=FALSE} 26 | options( 27 | htmltools.dir.version = FALSE, formatR.indent = 2, width = 55, digits = 4 28 | ) 29 | 30 | # 填上你需要用到的包,如 c('ggplot2', 'dplyr') 31 | lapply(c('dplyr','knitr','flextable', 'readr', 'ftExtra'), function(pkg) { 32 | if (system.file(package = pkg) == '') install.packages(pkg) 33 | }) 34 | 35 | library('readr') 36 | library('flextable') 37 | library('ftExtra') 38 | library('officer') 39 | 40 | # Setup flextable default font 41 | def_fonts <- if( Sys.info()["sysname"] == "Windows" ){ 42 | "Microsoft YaHei" # TODO: Can we use YaHei in commercial publishing? 43 | } else if( Sys.info()["sysname"] == "Darwin" ){ 44 | "Helvetica" # TODO: Find the default Chinese font on Mac OSX 45 | } else { 46 | "Noto Sans CJK SC" # Default Chinese font on Ubuntu 47 | } 48 | set_flextable_defaults(font.family=def_fonts) 49 | 50 | # Setup flextable cell padding 51 | if (knitr::opts_knit$get("rmarkdown.pandoc.to") == "latex") { 52 | set_flextable_defaults(padding.bottom=0, padding.top=0, padding.left=0, padding.right=0) 53 | 54 | old_autofit <- autofit 55 | autofit <- function(...) { 56 | old_autofit(..., add_w=0, add_h=0) 57 | } 58 | } 59 | 60 | FitFlextableToPage <- function(ft, pgwidth = 6){ 61 | 62 | ft_out <- ft %>% autofit() 63 | 64 | ft_out <- width(ft_out, width = dim(ft_out)$widths*pgwidth /(flextable_dim(ft_out)$widths)) 65 | return(ft_out) 66 | } 67 | 68 | ``` 69 | \newpage{} 70 | 71 | # 丛书序言 {-} 72 | 73 | \markboth{丛书序言}{丛书序言} 74 | 75 | 人工智能、 大数据、 云计算、 物联网、 移动互联网以及区块链等新一代信息技术及其融合 76 | 发展是当代智能科技的主要体现, 并形成智能时代在当前以及未来一个时期的鲜明技术特征。 77 | 智能时代来临之际, 面对全球范围内以智能科技为代表的新技术革命, 高等教育也处于重要的 78 | 变革时期。 目前, 全世界高等教育的改革正呈现出结构的多样化、 课程内容的综合化、 教育模 79 | 式的学研产一体化、 教育协作的国际化以及教育的终身化等趋势。 在这些背景下, 计算机专业 80 | 教育面临着重要的挑战与变化, 以新型计算技术为核心并快速发展的智能科技正在引发我国计 81 | 算机专业教育的变革。 82 | 83 | 计算机专业教育既要凝练计算技术发展中的 “ 不变要素” , 也要更好地体现时代变化引发 84 | 的教育内容的更新; 既要突出计算机科学与技术专业的核心地位与基础作用, 也需兼顾新设专 85 | 业对专业知识结构所带来的影响。 适应智能时代需求的计算机类高素质人才, 除了应具备科学 86 | 思维、 创新素养、 敏锐感知、 协同意识、 终身学习和持续发展等综合素养与能力外, 还应具有 87 | 深厚的数理理论基础、 扎实的计算思维与系统思维、 新型计算系统创新设计以及智能应用系统 88 | 综合研发等专业素养和能力。 89 | 90 | 智能时代计算机类专业教育计算机类专业系统能力培养 2.0 研究组在分析计算机科学技术 91 | 及其应用发展特征、 创新人才素养与能力需求的基础上, 重构和优化了计算机类专业在数理基 92 | 础、 计算平台、 算法与软件以及应用共性各层面的知识结构, 形成了计算与系统思维、 新型系 93 | 统设计创新实践等能力体系, 并将所提出的智能时代计算机类人才专业素养及综合能力培养融 94 | 于专业教育的各个环节之中, 构建了适应时代的计算机类专业教育主流模式。 95 | 96 | 自 2008 年开始, 教育部计算机类专业教学指导委员会就组织专家组开展计算机系统能力 97 | 培养的研究、 实践和推广, 以注重计算系统硬件与软件有机融合、 强化系统设计与优化能力为 98 | 主体, 取得了很好的成效。 2018 年以来, 为了适应智能时代计算机教育的重要变化, 计算机 99 | 类专业教学指导委员会及时扩充了专家组成员, 继续实施和深化智能时代计算机类专业教育的 100 | 研究与实践工作, 并基于这些工作形成计算机类专业系统能力培养 2.0。 101 | 102 | 本系列教材就是依据智能时代计算机类专业教育研究结果而组织编写并出版的。 其中的教 103 | 材在智能时代计算机专业教育研究组起草的指导大纲框架下, 形成不同风格, 各有重点与侧 104 | 重。 其中多数将在已有优秀教材的基础上, 依据智能时代计算机类专业教育改革与发展需求, 105 | 优化结构、 重组知识, 既注重不变要素凝练, 又体现内容适时更新; 有的对现有计算机专业知 106 | 识结构依据智能时代发展需求进行有机组合与重新构建; 有的打破已有教材内容格局, 支持更 107 | 为科学合理的知识单元与知识点群, 方便在有效教学时间范围内实施高效的教学; 有的依据新 108 | 型计算理论与技术或新型领域应用发展而新编, 注重新型计算模型的变化, 体现新型系统结 109 | 构, 强化新型软件开发方法, 反映新型应用形态。 110 | 111 | 本系列教材在编写与出版过程中, 十分关注计算机专业教育与新一代信息技术应用的深度 112 | 融合, 将实施教材出版与 MOOC 模式的深度结合、 教学内容与新型试验平台的有机结合, 以及 113 | 教学效果评价与智能教育发展的紧密结合。 114 | 115 | 本系列教材的出版, 将支撑和服务智能时代我国计算机类专业教育, 期望得到广大计算机 116 | 教育界同人的关注与支持, 恳请提出建议与意见。 期望我国广大计算机教育界同人同心协力, 117 | 努力培养适应智能时代的高素质创新人才, 以推动我国智能科技的发展以及相关领域的综合应 118 | 用, 为实现教育强国和国家发展目标做出贡献。 119 | 120 |

    121 | 智能时代计算机类专业教育计算机类专业系统能力培养 2.0 研究组 122 |
    123 | 2020 年 1 月 124 |

    125 | -------------------------------------------------------------------------------- /latex/after_body.tex: -------------------------------------------------------------------------------- 1 | \backmatter 2 | \printindex 3 | -------------------------------------------------------------------------------- /latex/before_body.tex: -------------------------------------------------------------------------------- 1 | 2 | \thispagestyle{empty} 3 | 4 | \setlength{\abovedisplayskip}{-5pt} 5 | \setlength{\abovedisplayshortskip}{-5pt} 6 | -------------------------------------------------------------------------------- /latex/preamble.tex: -------------------------------------------------------------------------------- 1 | \usepackage{booktabs} 2 | \usepackage{longtable} 3 | 4 | \usepackage{framed} 5 | \usepackage[dvipsnames]{xcolor} 6 | \definecolor{shadecolor}{RGB}{248,248,248} 7 | 8 | \usepackage{gbt7714} 9 | 10 | \usepackage{fontspec} 11 | \setmainfont{Noto Sans CJK SC} 12 | 13 | \renewcommand{\textfraction}{0.05} 14 | \renewcommand{\topfraction}{0.8} 15 | \renewcommand{\bottomfraction}{0.8} 16 | \renewcommand{\floatpagefraction}{0.75} 17 | 18 | \let\oldhref\href 19 | \renewcommand{\href}[2]{#2\footnote{\url{#1}}} 20 | 21 | \makeatletter 22 | \newenvironment{kframe}{% 23 | \medskip{} 24 | \setlength{\fboxsep}{.8em} 25 | \def\at@end@of@kframe{}% 26 | \ifinner\ifhmode% 27 | \def\at@end@of@kframe{\end{minipage}}% 28 | \begin{minipage}{\columnwidth}% 29 | \fi\fi% 30 | \def\FrameCommand##1{\hskip\@totalleftmargin \hskip-\fboxsep 31 | \colorbox{shadecolor}{##1}\hskip-\fboxsep 32 | % There is no \\@totalrightmargin, so: 33 | \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}% 34 | \MakeFramed {\advance\hsize-\width 35 | \@totalleftmargin\z@ \linewidth\hsize 36 | \@setminipage}}% 37 | {\par\unskip\endMakeFramed% 38 | \at@end@of@kframe} 39 | \makeatother 40 | 41 | \makeatletter 42 | \@ifundefined{Shaded}{ 43 | }{\renewenvironment{Shaded}{\begin{kframe}}{\end{kframe}}} 44 | \@ifpackageloaded{fancyvrb}{% 45 | % https://github.com/CTeX-org/ctex-kit/issues/331 46 | \RecustomVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},formatcom=\xeCJKVerbAddon}% 47 | }{} 48 | \makeatother 49 | 50 | 51 | \newenvironment{cols}[1][]{}{} 52 | 53 | \newenvironment{col}[1]{\begin{minipage}{#1}\ignorespaces}{% 54 | \end{minipage} 55 | \ifhmode\unskip\fi 56 | \aftergroup\useignorespacesandallpars} 57 | 58 | \def\useignorespacesandallpars#1\ignorespaces\fi{% 59 | #1\fi\ignorespacesandallpars} 60 | 61 | \makeatletter 62 | \def\ignorespacesandallpars{% 63 | \@ifnextchar\par 64 | {\expandafter\ignorespacesandallpars\@gobble}% 65 | {}% 66 | } 67 | \makeatother 68 | 69 | \usepackage{makeidx} 70 | \makeindex 71 | 72 | \urlstyle{tt} 73 | 74 | \usepackage{amsthm} 75 | \makeatletter 76 | \def\thm@space@setup{% 77 | \thm@preskip=8pt plus 2pt minus 4pt 78 | \thm@postskip=\thm@preskip 79 | } 80 | \makeatother 81 | 82 | \setlength\parindent{2em} 83 | 84 | \frontmatter 85 | -------------------------------------------------------------------------------- /latex/template.tex: -------------------------------------------------------------------------------- 1 | \documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} 2 | $if(beamerarticle)$ 3 | \usepackage{beamerarticle} % needs to be loaded first 4 | $endif$ 5 | $if(fontfamily)$ 6 | \usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} 7 | $else$ 8 | \usepackage{lmodern} 9 | $endif$ 10 | $if(linestretch)$ 11 | \usepackage{setspace} 12 | \setstretch{$linestretch$} 13 | $endif$ 14 | \usepackage{amssymb,amsmath} 15 | \usepackage{ifxetex,ifluatex} 16 | \usepackage{fixltx2e} % provides \textsubscript 17 | \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex 18 | \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} 19 | \usepackage[utf8]{inputenc} 20 | $if(euro)$ 21 | \usepackage{eurosym} 22 | $endif$ 23 | \else % if luatex or xelatex 24 | \ifxetex 25 | \usepackage{xltxtra,xunicode} 26 | \else 27 | \usepackage{fontspec} 28 | \fi 29 | \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} 30 | $for(fontfamilies)$ 31 | \newfontfamily{$fontfamilies.name$}[$fontfamilies.options$]{$fontfamilies.font$} 32 | $endfor$ 33 | $if(euro)$ 34 | \newcommand{\euro}{€} 35 | $endif$ 36 | $if(mainfont)$ 37 | \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} 38 | $endif$ 39 | $if(sansfont)$ 40 | \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} 41 | $endif$ 42 | $if(monofont)$ 43 | \setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$} 44 | $endif$ 45 | $if(CJKmainfont)$ 46 | \usepackage{xeCJK} 47 | \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} 48 | $endif$ 49 | \fi 50 | % use upquote if available, for straight quotes in verbatim environments 51 | \IfFileExists{upquote.sty}{\usepackage{upquote}}{} 52 | % use microtype if available 53 | \IfFileExists{microtype.sty}{% 54 | \usepackage{microtype} 55 | \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts 56 | }{} 57 | $if(geometry)$ 58 | \usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} 59 | $endif$ 60 | \usepackage[unicode=true]{hyperref} 61 | $if(colorlinks)$ 62 | \PassOptionsToPackage{usenames,dvipsnames}{color} % color is loaded by hyperref 63 | $endif$ 64 | \hypersetup{ 65 | $if(title-meta)$ 66 | pdftitle={$title-meta$}, 67 | $endif$ 68 | $if(author-meta)$ 69 | pdfauthor={$author-meta$}, 70 | $endif$ 71 | $if(keywords)$ 72 | pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, 73 | $endif$ 74 | $if(colorlinks)$ 75 | colorlinks=true, 76 | linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, 77 | citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, 78 | urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, 79 | $else$ 80 | pdfborder={0 0 0}, 81 | $endif$ 82 | breaklinks=true} 83 | \urlstyle{same} % don't use monospace font for urls 84 | $if(lang)$ 85 | \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex 86 | \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} 87 | $if(babel-newcommands)$ 88 | $babel-newcommands$ 89 | $endif$ 90 | \else 91 | \usepackage{polyglossia} 92 | \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} 93 | $for(polyglossia-otherlangs)$ 94 | \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} 95 | $endfor$ 96 | \fi 97 | $endif$ 98 | $if(natbib)$ 99 | \usepackage{natbib} 100 | \bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} 101 | $endif$ 102 | $if(biblatex)$ 103 | \usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} 104 | $for(bibliography)$ 105 | \addbibresource{$bibliography$} 106 | $endfor$ 107 | $endif$ 108 | $if(csl-refs)$ 109 | \newlength{\cslhangindent} 110 | \setlength{\cslhangindent}{1.5em} 111 | \newlength{\csllabelwidth} 112 | \setlength{\csllabelwidth}{3em} 113 | \newenvironment{CSLReferences}[3] % #1 hanging-ident, #2 entry sp 114 | {% don't indent paragraphs 115 | \setlength{\parindent}{0pt} 116 | % turn on hanging indent if param 1 is 1 117 | \ifodd #1 \everypar{\setlength{\hangindent}{\cslhangindent}}\ignorespaces\fi 118 | % set line spacing 119 | % set entry spacing 120 | \ifnum #2 > 0 121 | \setlength{\parskip}{#3\baselineskip} 122 | \fi 123 | }% 124 | {} 125 | \usepackage{calc} % for \widthof, \maxof 126 | \newcommand{\CSLBlock}[1]{#1\hfill\break} 127 | \newcommand{\CSLLeftMargin}[1]{\parbox[t]{\maxof{\widthof{#1}}{\csllabelwidth}}{#1}} 128 | \newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth}{#1}} 129 | \newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1} 130 | $endif$ 131 | $if(listings)$ 132 | \usepackage{listings} 133 | $endif$ 134 | $if(lhs)$ 135 | \lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} 136 | $endif$ 137 | $if(highlighting-macros)$ 138 | $highlighting-macros$ 139 | $endif$ 140 | $if(verbatim-in-note)$ 141 | \usepackage{fancyvrb} 142 | \VerbatimFootnotes % allows verbatim text in footnotes 143 | $endif$ 144 | $if(tables)$ 145 | \usepackage{longtable,booktabs} 146 | % Fix footnotes in tables (requires footnote package) 147 | \IfFileExists{footnote.sty}{\usepackage{footnote}\makesavenoteenv{long table}}{} 148 | $endif$ 149 | $if(graphics)$ 150 | \usepackage{graphicx,grffile} 151 | \makeatletter 152 | \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} 153 | \def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} 154 | \makeatother 155 | % Scale images if necessary, so that they will not overflow the page 156 | % margins by default, and it is still possible to overwrite the defaults 157 | % using explicit options in \includegraphics[width, height, ...]{} 158 | \setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} 159 | $endif$ 160 | $if(links-as-notes)$ 161 | % Make links footnotes instead of hotlinks: 162 | \renewcommand{\href}[2]{#2\footnote{\url{#1}}} 163 | $endif$ 164 | $if(strikeout)$ 165 | \usepackage[normalem]{ulem} 166 | % avoid problems with \sout in headers with hyperref: 167 | \pdfstringdefDisableCommands{\renewcommand{\sout}{}} 168 | $endif$ 169 | $if(indent)$ 170 | $else$ 171 | \IfFileExists{parskip.sty}{% 172 | \usepackage{parskip} 173 | }{% else 174 | \setlength{\parindent}{0pt} 175 | \setlength{\parskip}{6pt plus 2pt minus 1pt} 176 | } 177 | $endif$ 178 | \setlength{\emergencystretch}{3em} % prevent overfull lines 179 | \providecommand{\tightlist}{% 180 | \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} 181 | $if(numbersections)$ 182 | \setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} 183 | $else$ 184 | \setcounter{secnumdepth}{0} 185 | $endif$ 186 | $if(subparagraph)$ 187 | $else$ 188 | % Redefines (sub)paragraphs to behave more like sections 189 | \ifx\paragraph\undefined\else 190 | \let\oldparagraph\paragraph 191 | \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} 192 | \fi 193 | \ifx\subparagraph\undefined\else 194 | \let\oldsubparagraph\subparagraph 195 | \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} 196 | \fi 197 | $endif$ 198 | $if(dir)$ 199 | \ifxetex 200 | % load bidi as late as possible as it modifies e.g. graphicx 201 | $if(latex-dir-rtl)$ 202 | \usepackage[RTLdocument]{bidi} 203 | $else$ 204 | \usepackage{bidi} 205 | $endif$ 206 | \fi 207 | \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex 208 | \TeXXeTstate=1 209 | \newcommand{\RL}[1]{\beginR #1\endR} 210 | \newcommand{\LR}[1]{\beginL #1\endL} 211 | \newenvironment{RTL}{\beginR}{\endR} 212 | \newenvironment{LTR}{\beginL}{\endL} 213 | \fi 214 | $endif$ 215 | 216 | % set default figure placement to htbp 217 | \makeatletter 218 | \def\fps@figure{htbp} 219 | \makeatother 220 | 221 | $for(header-includes)$ 222 | $header-includes$ 223 | $endfor$ 224 | 225 | $if(title)$ 226 | \title{$title$$if(thanks)$\thanks{$thanks$}$endif$} 227 | $endif$ 228 | $if(subtitle)$ 229 | \providecommand{\subtitle}[1]{} 230 | \subtitle{$subtitle$} 231 | $endif$ 232 | $if(author)$ 233 | \author{$for(author)$$author$$sep$ \and $endfor$} 234 | $endif$ 235 | $if(institute)$ 236 | \providecommand{\institute}[1]{} 237 | \institute{$for(institute)$$institute$$sep$ \and $endfor$} 238 | $endif$ 239 | \date{$date$} 240 | 241 | \begin{document} 242 | $if(title)$ 243 | \maketitle 244 | $endif$ 245 | $if(abstract)$ 246 | \begin{abstract} 247 | $abstract$ 248 | \end{abstract} 249 | $endif$ 250 | 251 | $for(include-before)$ 252 | $include-before$ 253 | 254 | $endfor$ 255 | $if(toc)$ 256 | { 257 | \setcounter{tocdepth}{$toc-depth$} 258 | \tableofcontents 259 | } 260 | $endif$ 261 | $if(lot)$ 262 | \listoftables 263 | $endif$ 264 | $if(lof)$ 265 | \listoffigures 266 | $endif$ 267 | $body$ 268 | 269 | $if(natbib)$ 270 | $if(bibliography)$ 271 | $if(biblio-title)$ 272 | $if(book-class)$ 273 | \renewcommand\bibname{$biblio-title$} 274 | $else$ 275 | \renewcommand\refname{$biblio-title$} 276 | $endif$ 277 | $endif$ 278 | \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} 279 | 280 | $endif$ 281 | $endif$ 282 | $if(biblatex)$ 283 | \printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ 284 | 285 | $endif$ 286 | $for(include-after)$ 287 | $include-after$ 288 | 289 | $endfor$ 290 | \end{document} 291 | -------------------------------------------------------------------------------- /materials/chapter1/flops_bandwidth.csv: -------------------------------------------------------------------------------- 1 | CPU,年代,主频,SIMD,GFLOPS,GB/s,含SIMD比例,无SIMD比例 2 | DEC Alpha 21264,1996,600MHz,-,1.2,2,0.6,0.6 3 | AMD K7 Athlon,1999,700MHz,-,1.4,1.6,0.88,0.88 4 | Intel Pentium III,1999,600MHz,-,0.6,0.8,0.75,0.75 5 | Intel Pentium IV,2001,1.5GHz,-,3,3.2,0.94,0.94 6 | Intel Core2 E6420 X2,2007,2.8GHz,128位,22.4,8.5,2.64,1.32 7 | AMD K10 Phenom II X4 955,2009,3.2GHz,128位,51.2,21.3,2.4,1.2 8 | Intel Nehalem X5560,2009,2.8GHz,128位,44.8,32,1.4,0.7 9 | IBM Power8,2014,5.0GHz,128位,480,230.4,2.08,1.04 10 | AMD Piledriver Fx8350,2014,4.0GHz,256位,128,29.9,4.29,1.07 11 | Intel Skylake E3-1230 V5,2015,3.4GHz,256位,217.6,34.1,6.38,1.6 12 | 龙芯3A2000,2015,1.0GHz,-,16,16,1,1 13 | 龙芯3A5000,2020,2.5GHz,256位,160.0,51.2,3.13,0.78 14 | -------------------------------------------------------------------------------- /materials/chapter1/program_and_data.csv: -------------------------------------------------------------------------------- 1 | a,b,c,d 2 | 100,3,,3 3 | 101,4,,4 4 | 102,5,,5 5 | 103,7,,7 6 | 104,,,12 7 | 105,,,35 8 | 106,,,47 9 | ,……,,…… 10 | 200,读取100号单元,,读取100号单元 11 | 201,读取101号单元,,读取101号单元 12 | 202,两数相乘,,两数相乘 13 | 203,存入结果到104号单元,,存入结果到104号单元 14 | 204,读取102号单元,,读取102号单元 15 | 205,读取103号单元,,读取103号单元 16 | 206,两数相乘,,两数相乘 17 | 207,存入结果到105号单元,,存入结果到105号单元 18 | 208,读取104号单元,,读取104号单元 19 | 209,读取105号单元,,读取105号单元 20 | 210,两数相加,,两数相加 21 | 211,存入结果到106号单元,,存入结果到106号单元 22 | ,a),,b) 23 | -------------------------------------------------------------------------------- /materials/chapter1/spec_cpu2000.csv: -------------------------------------------------------------------------------- 1 | SPEC程序,运行时间/秒,分值,运行时间/秒1,分值1 2 | 164.gzip,503,279,323,433 3 | 175.vpr,389,360,222,632 4 | 176.gcc,206,533,110,1003 5 | 181.mcf,480,375,195,925 6 | 186.crafty,166,604,122,822 7 | 197.parser,707,254,266,676 8 | 252.eon,159,815,141,924 9 | 253.perlbmk,418,431,279,644 10 | 254.gap,338,325,155,711 11 | 255.vortex,291,652,125,1520 12 | 256.bzip2,383,391,285,527 13 | 300.twolf,421,712,364,824 14 | SPEC_INT2000,,447,,764 15 | 168.wupwise,338,473,123,1296 16 | 171.swim,1299,239,324,957 17 | 172.mgrid,1045,172,169,1062 18 | 173.applu,900,233,197,1067 19 | 177.mesa,244,574,156,896 20 | 178.galgel,507,572,143,2022 21 | 179.art,173,1504,97,2686 22 | 183.equake,457,285,96,1353 23 | 187.facerec,288,659,146,1306 24 | 188.ammp,538,409,274,803 25 | 189.lucas,716,279,181,1104 26 | 191.fma3d,550,382,203,1034 27 | 200.sixtrack,553,199,276,399 28 | 301.apsi,1159,224,235,1108 29 | SPEC_FP2000,,367,,1120 30 | -------------------------------------------------------------------------------- /materials/chapter10/MPI.c: -------------------------------------------------------------------------------- 1 | #include "mpi.h" 2 | int main(int argc,char *argv[]) 3 | { int myid,count; 4 | MPI_Init(&agrc,&argv); /*启动计算*/ 5 | MPI_Comm_size(MPI_COMM_WORLD,&count); /*获得进程总数*/ 6 | MPI_Comm_rank(MPI_COMM_WORLD, &myid);/*获得自己进程号*/ 7 | printf("I am %d of %d\n", myid,count); /*打印消息*/ 8 | MPI_Finalize();/*结束计算*/ 9 | } -------------------------------------------------------------------------------- /materials/chapter10/Makefile: -------------------------------------------------------------------------------- 1 | # 注意:为了保持生成的文件宽度相同,每个源文件最长的行应该都保持为80,不够的可以在某一行末尾添空格 2 | # 理论上各种Mono的字体应该都可以满足,但实际测试发现很多字体并不能保证生成的字符宽度一致。 3 | 4 | %.c.png:%.c 5 | pygmentize -f png -O encoding=utf8,font_name='SimSun-ExtB',line_numbers=False -o $@ $< 6 | # pygmentize -f png -O encoding=utf8,font_name='Noto Sans Mono CJK SC',line_numbers=False $< -o $@ 7 | 8 | %.S.png:%.S 9 | pygmentize -f png -O encoding=utf8,font_name='SimSun-ExtB',line_numbers=False -o $@ $< 10 | # pygmentize -f png -O encoding=utf8,font_name='Noto Sans Mono CJK SC',line_numbers=False $< -o $@ 11 | 12 | %.txt.png:%.txt 13 | pygmentize -f png -O encoding=utf8,font_name='noto',line_numbers=False -o $@ $< 14 | 15 | all:atomic.c.png barrier.c.png critical.c.png dataprallel.c.png for.c.png loongsonSIMD.S.png Makefile maritx_OpenMP.c.png martix_MPI.c.png master.c.png MPI.c.png paralle.c.png parallel_for.c.png parallel_sections.c.png pi_C.c.png pi_MPI.c.png pi_OpenMP.c.png pi_Pthreads.c.png Pthreads.c.png sections.c.png SIMD.S.png single.c.png taskparllel.c.png test4.c.png threadprivate.c.png tra_SIMD.c.png OpenMP_struct.c.png 16 | @echo 'done' 17 | 18 | clean: 19 | rm -f *.png 20 | -------------------------------------------------------------------------------- /materials/chapter10/OpenMP_struct.c: -------------------------------------------------------------------------------- 1 | #include 2 | main(){ 3 | int var1,var2,var3; 4 | … 5 | #pragma omp parallel private(var1,var2) shared(var3) 6 | { 7 | … 8 | } 9 | … 10 | } 11 | -------------------------------------------------------------------------------- /materials/chapter10/Pthreads.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #define NUM_THREADS 4 //假设线程数目为4 5 | #define n 1000 6 | double *A,*B,*C; 7 | void *matrixMult(void *id) {//计算矩阵乘 8 | int my_id = (int ) id; 9 | int i,j,k,start,end; 10 | //计算进程负责的部分 11 | start = my_id*(n/NUM_THREADS); 12 | if(my_id == NUMTHREADS-1) 13 | end = n; 14 | else 15 | end = start+(n/NUM_THREADS); 16 | 17 | for(i=start;i 2 | #include 3 | #define n 1000 4 | double A[n][n],B[n][n],C[n][n]; 5 | 6 | int main() 7 | { 8 | int i,j,k; 9 | //初始化矩阵A和矩阵B 10 | for(i=0;i 2 | #include "mpi.h" 3 | #define n 1000 4 | int main(int argc, char **argv) 5 | { 6 | double *A,*B,*C; 7 | int i,j,k; 8 | int ID,num_procs,line; 9 | MPI_Status status; 10 | 11 | MPI_Init(&argc,&argv); //Initialize the MPI environment 12 | MPI_Comm_rank(MPI_COMM_WORLD,&ID);//获取当前进程号 13 | MPI_Comm_size(MPI_COMM_WORLD,&num_procs);//获取进程数目 14 | 15 | //分配数据空间 16 | A = (double *)malloc(sizeof(double)*n*n); 17 | B = (double *)malloc(sizeof(double)*n*n); 18 | C = (double *)malloc(sizeof(double)*n*n); 19 | line = n/num_procs;//按进程数来划分数据 20 | 21 | if(ID==0){ //节点0,主进程 22 | //初始化数组 23 | for(i=0;i 2 | #include 3 | int main(){ 4 | int i; 5 | int num_steps=1000000; 6 | double x,pi,step,sum=0.0; 7 | step = 1.0/(double) num_steps; 8 | 9 | for(i=0;i 2 | #include “mpi.h” 3 | int main(int argc, char **argv){ 4 | int num_steps=1000000; 5 | double x,pi,step,sum,sumallprocs; 6 | int i,start, end,temp; 7 | int ID,num_procs;//进程编号及组中的进程数量, 进程编号的范围为0到num_procs-1 8 | MPI_Status status; 9 | //Initialize the MPI environment 10 | MPI_Init(&argc,&argv); 11 | MPI_Comm_rank(MPI_COMM_WORLD,&ID);// 12 | MPI_Comm_size(MPI_COMM_WORLD,&num_procs); 13 | //任务划分并计算 14 | step = 1.0/num_steps; 15 | start = ID *(num_steps/num_procs) ; 16 | 17 | if (ID == num_procs-1) 18 | end = num_steps; 19 | else 20 | end = start + num_steps/num_procs; 21 | 22 | for(i=start; i 2 | #include 3 | int main(){ 4 | int i; 5 | int num_steps=1000000; 6 | double x,pi,step,sum=0.0; 7 | step = 1.0/(double) num_steps; 8 | #pragma omp parallel for private(i, x), reduction(+:sum) 9 | for(i=0;i 2 | #include 3 | #include 4 | #define NUM_THREADS 4 //假设线程数目为4 5 | int num_steps = 1000000; 6 | double step = 0.0, sum = 0.0; 7 | pthread_mutex_t mutex; 8 | 9 | void *countPI(void *id) { 10 | int index = (int ) id; 11 | int start = index*(num_steps/NUM_THREADS); 12 | int end; 13 | double x = 0.0, y = 0.0; 14 | if (index == NUM_THREADS-1) 15 | end = num_steps; 16 | else 17 | end = start+(num_steps/NUM_THREADS); 18 | 19 | for (int i=start; i 4 | b .L2 5 | .L1: 6 | 7 | .L2: 8 | 9 | -------------------------------------------------------------------------------- /materials/chapter2/if_else.c: -------------------------------------------------------------------------------- 1 | if (cond_exp) 2 | then_statement 3 | else 4 | else_statement 5 | 6 | -------------------------------------------------------------------------------- /materials/chapter2/int_type.csv: -------------------------------------------------------------------------------- 1 | C语言名称,LA32名称/数据长度,LA64名称/数据长度,X86名称/数据长度,X86-64名称/数据长度 2 | char,Byte/1,Byte/1,Byte/1,Byte/1 3 | short,Halfword/2,Halfword/2,Word/2,Word/2 4 | int,Word/4,Word/4,Dword/4,Dword/4 5 | long,Word/4,Dword/8,Dword/4,Qword/8 6 | long long,Dword/8,Dword/8,Qword/8,Qword/8 7 | -------------------------------------------------------------------------------- /materials/chapter2/isatype.csv: -------------------------------------------------------------------------------- 1 | 堆栈型,累加器型,寄存器-存储器型,寄存器-寄存器型 2 | PUSH A,LOAD A,"LOAD R1,A","LOAD R1,A" 3 | PUSH B,ADD B,"ADD R1,B","LOAD R2,B" 4 | ADD,STORE C,"STORE C,R1","ADD R3,R1,R2" 5 | POP C,,,"STORE C,R3" 6 | -------------------------------------------------------------------------------- /materials/chapter2/loop.S: -------------------------------------------------------------------------------- 1 | test_for: 2 | or $t0,$r0,$r0 3 | or $t1,$r0,$r0 4 | .L2: 5 | blt $t0,$a0,.L3 6 | or $a0,$t1,$r0 7 | jr $ra 8 | .L3: 9 | add.w $t1,$t1,$t0 10 | addi.w $t0,$t0,1 11 | b .L2 12 | 13 | 14 | test_while: 15 | or $t0,$r0,$r0 16 | or $t1,$r0,$r0 17 | .L2: 18 | blt $t0,$a0,.L3 19 | or $a0,$t1,$r0 20 | jr $ra 21 | .L3: 22 | add.w $t1,$t1,$t0 23 | addi.w $t0,$t0,1 24 | b .L2 25 | 26 | test_dowhile: 27 | // a : $a0 28 | // sum : $t0 29 | // i : $t1 30 | or $t0,$r0,$r0 31 | or $t1,$r0,$r0 32 | .L1: 33 | add.w $t0,$t0,$t1 34 | addi.w $t1,$t1,1 35 | blt $t1,$a0,.L1 36 | or $a0,$t1,$r0 37 | jr $ra 38 | -------------------------------------------------------------------------------- /materials/chapter2/loop.c: -------------------------------------------------------------------------------- 1 | int test_for(int a) { 2 | int sum = 0; 3 | int i = 0; 4 | 5 | for (i = 0; i < a; i++) { 6 | sum += i; 7 | } 8 | 9 | return sum; 10 | } 11 | 12 | 13 | int test_while(int a) { 14 | int sum = 0; 15 | int i = 0; 16 | 17 | while (i < a) { 18 | sum += i; 19 | i++; 20 | } 21 | 22 | return sum; 23 | } 24 | 25 | 26 | int test_dowhile(int a) { 27 | int sum = 0; 28 | int i = 0; 29 | 30 | do { 31 | sum += i; 32 | i++; 33 | } while (i < a); 34 | 35 | return sum; 36 | } 37 | -------------------------------------------------------------------------------- /materials/chapter2/mem_inst.csv: -------------------------------------------------------------------------------- 1 | 指令,指令功能 2 | LD.B,取字节 3 | LD.BU,取字节,无符号扩展 4 | LD.H,取半字 5 | LD.HU,取半字,无符号扩展 6 | LD.W,取字 7 | LD.WU,取字,无符号扩展 8 | LD.D,取双字 9 | ST.B,存字节 10 | ST.H,存半字 11 | ST.W,存字 12 | ST.D,存双字 13 | -------------------------------------------------------------------------------- /materials/chapter2/ppc.S: -------------------------------------------------------------------------------- 1 | LOOP: 2 | LFU fp0=y(r4=r4+8) 3 | FMUL fp0=fp0,fp1 4 | LF fp2=x(r3,8) 5 | FMADD fp0=fp0,fp2,fp3 6 | STFU x(r3=r3+8)=fp0 7 | BC LOOP,CTR>0 8 | -------------------------------------------------------------------------------- /materials/chapter2/ppc_note.txt: -------------------------------------------------------------------------------- 1 | r3+8指向x 2 | r4+8指向y 3 | fp1内容为t 4 | fp3内容为r 5 | CTR内容为512 6 | -------------------------------------------------------------------------------- /materials/chapter2/regnum.csv: -------------------------------------------------------------------------------- 1 | 指令集,整数通用寄存器数 2 | Itanium,128 3 | VAX,16 4 | ARMv8,31 5 | PowerPC,32 6 | Alpha,32(包括“zero”) 7 | SPARC,32(包括“zero”) 8 | MIPS,在mips16模式下为8,在32/64位模式下为32(包括“zero”) 9 | ARMv7,在16位Thumb 模式下为7,在32位模式下为14 10 | X86,"16/32位时为8, 64位时为16" 11 | LoongArch,32(包括“zero”) 12 | -------------------------------------------------------------------------------- /materials/chapter2/switch_case.S: -------------------------------------------------------------------------------- 1 | st: 2 | addi.w $t0,$a0, -10 //a-10 3 | sltui $t1,$t0, 8 4 | beqz $t1, default //if (a-10)>=8 5 | //goto default 6 | la $t2, jr_table 7 | alsl.d $t1, $t0, $t2, 3 8 | //(a-10)*8+jr_table 9 | ld.d $t0, $t1, 0 10 | jr $t0 11 | default: 12 | or $a1,$a0,$r0 13 | case_14: 14 | or $a0,$a1,$r0 15 | jr $ra //return b for case_14, 16 | //return a for default 17 | case_15: 18 | andi $a2,$a1,0xf //b & 0xf 19 | case_10: 20 | addi.w $a1,$a2,50 //c+50 21 | b case_14 22 | case_12_17: 23 | addi.w $a1,$a1,50 //b+50 24 | b case_14 25 | # jump table 26 | .section .rodata 27 | .align 3 28 | jr_table: 29 | .dword case_10 30 | .dword default 31 | .dword case_12_17 32 | .dword default 33 | .dword case_14 34 | .dword case_15 35 | .dword default 36 | .dword case_12_17 37 | -------------------------------------------------------------------------------- /materials/chapter2/switch_case.c: -------------------------------------------------------------------------------- 1 | int st(int a, int b, int c) 2 | { 3 | switch (a) { 4 | case 15: 5 | c = b & 0xf; 6 | case 10: 7 | return c + 50; 8 | case 12: 9 | case 17: 10 | return b + 50; 11 | case 14: 12 | return b; 13 | default: 14 | return a; 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /materials/chapter2/switch_case_chain.S: -------------------------------------------------------------------------------- 1 | st: 2 | addi.w $t0,$r0,14 3 | beq $a0,$t0,.L7 //(a==14)? 4 | blt $t0,$a0,.L3 //(a>14)? 5 | addi.w $t0,$r0,10 6 | beq $a0,$t0,.L4 //(a==10)? 7 | addi.w $t0,$r0,12 8 | beq $a0,$t0,.L5 //(a==12)? 9 | jr $ra //return a 10 | .L3: 11 | addi.w $t0,$r0,15 12 | beq $a0,$t0,.L6 //(a==15)? 13 | addi.w $t0,$r0,17 14 | beq $a0,$t0,.L5 //(a==17)? 15 | jr $ra //return a 16 | .L6: 17 | andi $a2,$a1,0xf //b & 0xf 18 | .L4: 19 | addi.w $a0,$a2,50 //c + 50 20 | jr $ra 21 | .L5: 22 | addi.w $a0,$a1,50 //b + 50 23 | jr $ra 24 | .L7: 25 | or $a0,$a1,$r0 //return b 26 | jr $ra 27 | -------------------------------------------------------------------------------- /materials/chapter2/vax_addressing.csv: -------------------------------------------------------------------------------- 1 | 寻址方式,tex,spice,gcc 2 | 偏移量寻址,32%,55%,40% 3 | 立即数寻址,43%,17%,39% 4 | 寄存器间接寻址,24%,3%,11% 5 | 自增量寻址,0%,16%,6% 6 | 存储器间接寻址,1%,6%,1% 7 | -------------------------------------------------------------------------------- /materials/chapter3/csr.csv: -------------------------------------------------------------------------------- 1 | 助记符,编号,说明 2 | CRMD,Ox0,处理器当前运行模式及地址翻译模式、全局中断使能等配置信息。 3 | PRMD,0x1,触发当前普通异常的现场的运行模式及全局中断使能等配置信息 4 | EUEN,0x2,扩展部件的使能控制 5 | MISC,0x3,各权限等级下是否运行使用部分特权指令等杂项配置 6 | ECFG,0x4,局部中断使能、异常入口间距等配置信息 7 | ESTAT,0x5,记录异常和中断发生原因 8 | ERA,0x6,普通异常处理返回地址 9 | BADV,0x7,记录触发地址相关异常的访存虚地址 10 | BADI,0x8,记录触发异常指令的指令编码 11 | EENTRY,0xC,配置普通异常处理程序入口地址 12 | TLBIDX,0x10,存储管理(TLB)相关寄存器,将在第3节进行详细介绍 13 | TLBEHI,0x11,存储管理(TLB)相关寄存器,将在第3节进行详细介绍 14 | TLBELO0,0x12,存储管理(TLB)相关寄存器,将在第3节进行详细介绍 15 | TLBELO1,0x13,存储管理(TLB)相关寄存器,将在第3节进行详细介绍 16 | ASID,0x18,存储管理(TLB)相关寄存器,将在第3节进行详细介绍 17 | STLBPS,0x1E,存储管理(TLB)相关寄存器,将在第3节进行详细介绍 18 | PGDL,0x19,存储管理(TLB)相关寄存器,将在第3节进行详细介绍 19 | PGDH,0x1A,存储管理(TLB)相关寄存器,将在第3节进行详细介绍 20 | PGD,0x1B,存储管理(TLB)相关寄存器,将在第3节进行详细介绍 21 | PWCL,0x1C,存储管理(TLB)相关寄存器,将在第3节进行详细介绍 22 | PWCH,0x1D,存储管理(TLB)相关寄存器,将在第3节进行详细介绍 23 | SAVEn,0x30+n,保存临时数据 24 | TID,0x40,恒定频率计时器和定时器相关寄存器 25 | TCFG,0x41,恒定频率计时器和定时器相关寄存器 26 | TVAL,0x42,恒定频率计时器和定时器相关寄存器 27 | CNTC,0x43,恒定频率计时器和定时器相关寄存器 28 | TICLR,0x44,恒定频率计时器和定时器相关寄存器 29 | LLBCTL,0x60,LLBit的控制 30 | TLBRENTRY,0x88,TLB重填异常处理专用寄存器 31 | TLRBBADV,0x89,TLB重填异常处理专用寄存器 32 | TLBERA,0x8A,TLB重填异常处理专用寄存器 33 | TLBRSAVE,0x8B,TLB重填异常处理专用寄存器 34 | TLBRELO0,0x8C,TLB重填异常处理专用寄存器 35 | TLBRELO1,0x8D,TLB重填异常处理专用寄存器 36 | TLBREHI,0x8E,TLB重填异常处理专用寄存器 37 | TLBRPRMD,0x8F,TLB重填异常处理专用寄存器 38 | MERRCTL,0x90,由Cache校验错所引发的机器错误异常的相关控制状态寄存器 39 | MERRINFO1,0x91,由Cache校验错所引发的机器错误异常的相关控制状态寄存器 40 | MERRINFO2,0x92,由Cache校验错所引发的机器错误异常的相关控制状态寄存器 41 | MERRENTRY,0x93,由Cache校验错所引发的机器错误异常的相关控制状态寄存器 42 | MERRERA,0x94,由Cache校验错所引发的机器错误异常的相关控制状态寄存器 43 | MERRSAVE,0x95,由Cache校验错所引发的机器错误异常的相关控制状态寄存器 44 | DMW0~DMW3,0x180~0x183,直接映射配置窗口0~3的配置寄存器 45 | DBG,0x500,调试相关的控制状态寄存器 46 | DERA,0x501,调试相关的控制状态寄存器 47 | DSAVE,0x502,调试相关的控制状态寄存器 48 | -------------------------------------------------------------------------------- /materials/chapter3/exception.csv: -------------------------------------------------------------------------------- 1 | 异常代号,Ecode,Esubcode,异常说明,所属异常类别 2 | PIL,0x1,,load操作页无效异常,地址转换异常 3 | PIS,0x2,,store操作页无效异常,地址转换异常 4 | PIF,0x3,,取指操作页无效异常,地址转换异常 5 | PME,0x4,,页修改异常,地址转换异常 6 | PNR,0x5,,页不可读异常,地址转换异常 7 | PNX,0x6,,页不可执行异常,地址转换异常 8 | PPI,0x7,,页权限等级不合规异常,地址转换异常 9 | ADEF,0x8,0x0,取指地址错异常,指令执行中的错误 10 | ADEM,0x8,0x1,访存指令地址错异常,指令执行中的错误 11 | ALE,0x9,,地址非对齐异常,指令执行中的错误 12 | BCE,0xA,,边界约束检查错异常,指令执行中的错误 13 | SYS,0xB,,系统调用异常,系统调用和陷入 14 | BRK,0xC,,断点异常,系统调用和陷入 15 | INE,0xD,,指令不存在异常,指令执行中的错误 16 | IPE,0xE,,指令权限等级错异常,指令执行中的错误 17 | FPD,0xF,,浮点指令未使能异常,系统调用和陷入 18 | SXD,0x10,,128位向量扩展指令未使能异常,系统调用和陷入 19 | ASXD,0x11,,256位向量扩展指令未使能异常,系统调用和陷入 20 | FPE,0x12,0x0,基础浮点指令异常,需要软件修正的运算 21 | VFPE,0x12,0x1,向量浮点指令异常,需要软件修正的运算 22 | WPEF,0x13,0x0,取指监测点异常,系统调用和陷入 23 | WPEM,0x13,0x1,load/store操作监测点异常,系统调用和陷入 24 | INT,,,中断,外部事件 25 | TLBR,,,TLB重填异常,地址转换异常 26 | MERR,,,机器错误异常,数据完整性问题 27 | -------------------------------------------------------------------------------- /materials/chapter4/Makefile: -------------------------------------------------------------------------------- 1 | # 注意:为了保持生成的文件宽度相同,每个源文件最长的行应该都保持为80,不够的可以在某一行末尾添空格 2 | # 理论上各种Mono的字体应该都可以满足,但实际测试发现很多字体并不能保证生成的字符宽度一致。 3 | 4 | %.c.png:%.c 5 | pygmentize -f png -O encoding=utf8,font_name='SimSun',line_numbers=False $< -o $@ 6 | # pygmentize -f png -O encoding=utf8,font_name='Noto Sans Mono CJK SC',line_numbers=False $< -o $@ 7 | 8 | %.S.png:%.S 9 | pygmentize -f png -O encoding=utf8,font_name='SimSun',line_numbers=False $< -o $@ 10 | # pygmentize -f png -O encoding=utf8,font_name='Noto Sans Mono CJK SC',line_numbers=False $< -o $@ 11 | 12 | %.txt.png:%.txt 13 | pygmentize -f png -O encoding=utf8,font_name='SimSun',line_numbers=False $< -o $@ 14 | 15 | all: fun.c.png fun_mips.S.png fun_la.S.png varg.c.png simple.c.png simple.S.png simple_nofp.S.png normal.c.png normal.S.png dynamic.c.png dynamic.S.png keyboard_interrupt.txt.png syscall_write.S.png 16 | @echo 'done' 17 | 18 | clean: 19 | rm -f *.png 20 | -------------------------------------------------------------------------------- /materials/chapter4/context_switch.csv: -------------------------------------------------------------------------------- 1 | 场景,上下文切换时保存和恢复的内容 2 | 函数调用,部分寄存器(包括栈帧相关的$sp,$fp)、返回地址 3 | 中断和异常,(通常情况)全部定点寄存器、异常现场信息、异常相关信息 4 | 系统调用,部分定点寄存器(包括栈帧相关寄存器)、异常现场信息 5 | 线程,全部用户态寄存器、TLS、当前PC等相关信息 6 | 进程,全部用户态寄存器、页表基址等控制寄存器、当前PC等相关信息 7 | 虚拟机,虚拟CPU状态(寄存器、必要的特权资源等) 8 | -------------------------------------------------------------------------------- /materials/chapter4/dynamic.S: -------------------------------------------------------------------------------- 1 | dynamic: 2 | addi.d $sp,$sp,-32 3 | st.d $fp,$sp,16 #保存fp 4 | st.d $ra,$sp,24 #保存ra 5 | addi.d $fp,$sp,32 # fp指向入口时的sp 6 | addi.d $sp,$sp,-64 # alloca 7 | addi.d $a0,$sp,16 # 从sp+16到sp+80为分配的alloca空间 8 | addi.w $t0,$zero,291 # 0x123 9 | stptr.d $t0,$a0,0 10 | addi.w $t0,$zero,9 # 0x9 11 | stptr.d $t0,$sp,0 # sp到sp+16为调子函数的参数区 12 | addi.w $a7,$zero,8 # 0x8 13 | addi.w $a6,$zero,7 # 0x7 14 | addi.w $a5,$zero,6 # 0x6 15 | addi.w $a4,$zero,5 # 0x5 16 | addi.w $a3,$zero,4 # 0x4 17 | addi.w $a2,$zero,3 # 0x3 18 | addi.w $a1,$zero,291 # 0x123 19 | bl %plt(nested) 20 | addi.d $sp,$fp,-32 21 | ld.d $ra,$sp,24 22 | ld.d $fp,$sp,16 23 | addi.d $sp,$sp,32 24 | jr $ra 25 | -------------------------------------------------------------------------------- /materials/chapter4/dynamic.S.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/materials/chapter4/dynamic.S.png -------------------------------------------------------------------------------- /materials/chapter4/dynamic.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | extern long 4 | nested(long a, long b, long c, long d, long e, long f, long g, long h, long i); 5 | 6 | long dynamic(void){ 7 | long *p = alloca(64); 8 | p[0] = 0x123; 9 | 10 | return nested((long)p, p[0], 3, 4, 5, 6, 7, 8, 9); 11 | } 12 | -------------------------------------------------------------------------------- /materials/chapter4/dynamic.c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/materials/chapter4/dynamic.c.png -------------------------------------------------------------------------------- /materials/chapter4/fun.c: -------------------------------------------------------------------------------- 1 | extern void abort(void); 2 | int fun(double a1, double a2, double a3, double a4, double a5, double a6, 3 | double a7, double a8, double a9, int a10, double a11, int a12) 4 | { 5 | if (a9 != a11) abort(); 6 | return 0; 7 | } 8 | 9 | -------------------------------------------------------------------------------- /materials/chapter4/fun.c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/materials/chapter4/fun.c.png -------------------------------------------------------------------------------- /materials/chapter4/fun_la.S: -------------------------------------------------------------------------------- 1 | fun: 2 | movgr2fr.d $f0,$a0 # 注意这两行, $f0是参数a9,从$a0获得) 3 | movgr2fr.d $f1,$a2 # $f1从$a2获得,即参数a11 4 | fcmp.ceq.d $fcc0,$f1,$f0 # 比较a9和a11 5 | bceqz $fcc0,.L8 6 | move $a0,zero 7 | jr $ra 8 | .L8: 9 | addi.d $sp,$sp,-16 10 | st.d $ra,$sp,8 11 | bl %plt(abort) 12 | ld.d $ra,$sp,8 13 | -------------------------------------------------------------------------------- /materials/chapter4/fun_la.S.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/materials/chapter4/fun_la.S.png -------------------------------------------------------------------------------- /materials/chapter4/fun_mips.S: -------------------------------------------------------------------------------- 1 | fun: 2 | daddiu $sp,$sp,-16 3 | ldc1 $f1,16($sp) #a9从$sp + 16获得 4 | ldc1 $f0,32($sp) #a11从$sp + 32获得 5 | sd $28,0($sp) 6 | lui $28,%hi(%neg(%gp_rel(fun))) 7 | c.eq.d $fcc0,$f1,$f0 8 | daddiu $28,$28,%lo(%neg(%gp_rel(fun))) 9 | sd $31,8($sp) 10 | bc1f $fcc0,.L5 11 | daddu $28,$28,$25 12 | ld $31,8($sp) 13 | ld $28,0($sp) 14 | move $2,$0 15 | jr $31 16 | daddiu $sp,$sp,16 17 | 18 | .L5: 19 | ld $25,%call16(abort)($28) 20 | .reloc 1f,R_MIPS_JALR,abort 21 | 1: jalr $25 22 | nop 23 | -------------------------------------------------------------------------------- /materials/chapter4/fun_mips.S.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/materials/chapter4/fun_mips.S.png -------------------------------------------------------------------------------- /materials/chapter4/keyboard_interrupt.txt: -------------------------------------------------------------------------------- 1 | [ 1075.597624] [<9000000000c4b1b0>] input_event+0x30/0xc8 2 | [ 1075.597626] [<9000000000ca3ee4>] hidinput_report_event+0x44/0x68 3 | [ 1075.597628] [<9000000000ca1e30>] hid_report_raw_event+0x230/0x470 4 | [ 1075.597631] [<9000000000ca21a4>] hid_input_report+0x134/0x1b0 5 | [ 1075.597632] [<9000000000cb07ac>] hid_irq_in+0x9c/0x280 6 | [ 1075.597634] [<9000000000be9cf0>] __usb_hcd_giveback_urb+0xa0/0x120 7 | [ 1075.597636] [<9000000000c23a7c>] finish_urb+0xac/0x1c0 8 | [ 1075.597638] [<9000000000c24b50>] ohci_work.part.8+0x218/0x550 9 | [ 1075.597640] [<9000000000c27f98>] ohci_irq+0x108/0x320 10 | [ 1075.597642] [<9000000000be96e8>] usb_hcd_irq+0x28/0x40 11 | [ 1075.597644] [<9000000000296430>] __handle_irq_event_percpu+0x70/0x1b8 12 | [ 1075.597645] [<9000000000296598>] handle_irq_event_percpu+0x20/0x88 13 | [ 1075.597647] [<9000000000296644>] handle_irq_event+0x44/0xa8 14 | [ 1075.597648] [<900000000029abfc>] handle_level_irq+0xdc/0x188 15 | [ 1075.597651] [<90000000002952a4>] generic_handle_irq+0x24/0x40 16 | [ 1075.597652] [<900000000081dc50>] extioi_irq_dispatch+0x178/0x210 17 | [ 1075.597654] [<90000000002952a4>] generic_handle_irq+0x24/0x40 18 | [ 1075.597656] [<9000000000ee4eb8>] do_IRQ+0x18/0x28 19 | [ 1075.597658] [<9000000000203ffc>] except_vec_vi_end+0x94/0xb8 20 | -------------------------------------------------------------------------------- /materials/chapter4/keyboard_interrupt.txt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/materials/chapter4/keyboard_interrupt.txt.png -------------------------------------------------------------------------------- /materials/chapter4/la_reg.csv: -------------------------------------------------------------------------------- 1 | 寄存器编号,助记符,使用约定 2 | 0,zero,总是为0 3 | 1,ra,子程序返回地址 4 | 2,tp,Thread Pointer,指向线程私有存储区 5 | 3,sp,栈指针 6 | 4~11,a0~a7,子程序的前八个参数 7 | 4~5,v0~v1,v0/v1是a0/a1的别名,用于表示返回值 8 | 12~20,t0~t8,不需保存的暂存器 9 | 21,Reserved,暂时保留不用 10 | 22,fp,Frame Pointer,栈帧指针 11 | 23-31,s0~s8,寄存器变量,子程序使用需要保存和恢复 12 | -------------------------------------------------------------------------------- /materials/chapter4/mips_reg.csv: -------------------------------------------------------------------------------- 1 | 寄存器编号,O32助记符,N32/N64助记符,使用约定 2 | 0,zero,zero,总是为0 3 | 1,at,at,汇编暂存器 4 | 2~3,"v0,v1","v0,v1",子程序返回值 5 | 4~7,a0~a3,a0~a3,子程序的前几个参数 6 | 8~11,t0~t3,a4~a7,N32作为参数,O32作为不需保存的暂存器 7 | 12~15,t4~t7,t0~t3,不需保存的暂存器,但N32和O32命名不同 8 | 16~23,s0~s7,s0~s7,寄存器变量,过程调用时需要存储和恢复 9 | 24~25,"t8,t9","t8,t9",暂存器 10 | 26~27,"k0,k1","k0,k1",为异常处理保留 11 | 28,gp,gp,全局指针 12 | 29,sp,sp,栈指针 13 | 30,s8/fp,s8/fp,寄存器变量,或作为帧指针 14 | 31,ra,ra,子程序返回地址 15 | -------------------------------------------------------------------------------- /materials/chapter4/normal.S: -------------------------------------------------------------------------------- 1 | normal: 2 | addi.d $sp,$sp,-32 3 | addi.w $t0,$zero,9 # 0x9 4 | stptr.d $t0,$sp,0 5 | addi.w $a7,$zero,8 # 0x8 6 | addi.w $a6,$zero,7 # 0x7 7 | addi.w $a5,$zero,6 # 0x6 8 | addi.w $a4,$zero,5 # 0x5 9 | addi.w $a3,$zero,4 # 0x4 10 | addi.w $a2,$zero,3 # 0x3 11 | addi.w $a1,$zero,2 # 0x2 12 | addi.w $a0,$zero,1 # 0x1 13 | st.d $ra,$sp,24 14 | bl %plt(nested) 15 | ld.d $ra,$sp,24 16 | addi.d $sp,$sp,32 17 | jr $ra 18 | -------------------------------------------------------------------------------- /materials/chapter4/normal.S.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/materials/chapter4/normal.S.png -------------------------------------------------------------------------------- /materials/chapter4/normal.c: -------------------------------------------------------------------------------- 1 | extern int nested(int a, int b, int c, int d, int e, int f, int g, int h, int i); 2 | int normal(void){ 3 | return nested(1, 2, 3, 4, 5, 6, 7, 8, 9); 4 | } 5 | -------------------------------------------------------------------------------- /materials/chapter4/normal.c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/materials/chapter4/normal.c.png -------------------------------------------------------------------------------- /materials/chapter4/simple.S: -------------------------------------------------------------------------------- 1 | simple: 2 | addi.d $sp,$sp,-16 3 | st.d $fp,$sp,8 4 | addi.d $fp,$sp,16 5 | ld.d $fp,$sp,8 6 | bstrpick.w $a0,$a0,7,0 7 | add.w $a0,$a0,$a1 8 | addi.d $sp,$sp,16 9 | jr $ra 10 | -------------------------------------------------------------------------------- /materials/chapter4/simple.S.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/materials/chapter4/simple.S.png -------------------------------------------------------------------------------- /materials/chapter4/simple.c: -------------------------------------------------------------------------------- 1 | int simple(int a, int b) { 2 | return ((a&0xff)+b); 3 | } 4 | -------------------------------------------------------------------------------- /materials/chapter4/simple.c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/materials/chapter4/simple.c.png -------------------------------------------------------------------------------- /materials/chapter4/simple_nofp.S: -------------------------------------------------------------------------------- 1 | simple: 2 | bstrpick.w $a0,$a0,7,0 3 | add.w $a0,$a0,$a1 4 | jr $ra 5 | -------------------------------------------------------------------------------- /materials/chapter4/simple_nofp.S.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/materials/chapter4/simple_nofp.S.png -------------------------------------------------------------------------------- /materials/chapter4/syscall.csv: -------------------------------------------------------------------------------- 1 | 类型,系统调用,调用号,作用 2 | 进程控制,clone,220,克隆一个进程 3 | 进程控制,execv,221,执行一个程序 4 | 文件读写,read,63,读文件 5 | 文件读写,write,64,写文件 6 | 文件系统,mkdir,34,创建目录 7 | 文件系统,mount,40,挂载文件系统 8 | 系统控制,gettimeofday,169,获取系统时间 9 | 系统控制,reboot,142,重新启动 10 | 内存管理,mmap,222,映射虚拟内存页 11 | 信号量,semctl,191,信号量控制 12 | -------------------------------------------------------------------------------- /materials/chapter4/syscall_write.S: -------------------------------------------------------------------------------- 1 | .section .rodata 2 | .align 3 3 | .hello: 4 | .ascii "Hello World!\n\000" 5 | 6 | .text 7 | .align 3 8 | .global main 9 | main: 10 | li $a7, 64 #write的系统调用号 11 | li $a0, 1 # fd == 1是stdout的文件描述符号 12 | la.local $a1, .hello # 字符串地址 13 | li $a2, 14 # 字符串长度 14 | syscall 0x0 15 | jr $ra # 返回 16 | -------------------------------------------------------------------------------- /materials/chapter4/syscall_write.S.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/materials/chapter4/syscall_write.S.png -------------------------------------------------------------------------------- /materials/chapter4/t.S: -------------------------------------------------------------------------------- 1 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal 2 | -------------------------------------------------------------------------------- /materials/chapter4/t.c: -------------------------------------------------------------------------------- 1 | 2 | IIIIIIIIII 3 | HHHHHHHHHH 4 | AAAAATTTTT 5 | ATATATATAT 6 | -------------------------------------------------------------------------------- /materials/chapter4/varg.c: -------------------------------------------------------------------------------- 1 | struct Ss { 2 | char c1, c2; 3 | } a3 = {3, 4}; 4 | int fun (double a1, ...); 5 | int test () { 6 | return fun (1, (float) 2, a3, (long double) 5, (float) 6, 7 | (short) 7, (int) 8, (float) 9, (int)10); 8 | } 9 | -------------------------------------------------------------------------------- /materials/chapter4/varg.c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxsen/archbase/0921d51025db0642a16379dca7a9919cfad28391/materials/chapter4/varg.c.png -------------------------------------------------------------------------------- /materials/chapter4/varg_passing.csv: -------------------------------------------------------------------------------- 1 | 参数序号,传递方式,低位 高位 2 | 0,$fa0,(扩展为double)1 3 | 1,$a0,(扩展为double)2 4 | 2,$a1, 第1和2字节为3和4,其余为填充 5 | 3,$a2,(long double低64位)5 6 | 4,$a3,(long double高64位)5 7 | 5,$a4,(扩展为double)6 8 | 6,$a5,(扩展到64位)7 9 | 7,$a6,8 10 | 8,$a7,(扩展为double)9 11 | 9,内存$sp + 0,10 12 | -------------------------------------------------------------------------------- /materials/chapter5/alu.csv: -------------------------------------------------------------------------------- 1 | 处理器,寄存器,运算部件 2 | Alpha 21264,"Int regfile (80 4r6w) 3 | FP regfile (72 4r4w)","arith./logic unit; shift unit; 4 | mult unit; add/logic unit; 5 | shift unit; MVI/PLZ unit; 6 | arith/logic; arith/logic unit; 7 | FP add unit; FP mult unit; 8 | FP div/sqrt unit" 9 | MIPS R10000,"Int regfile (64 7r3w) 10 | FP regfile (64 5r3w)","arith./logic unit; shift unit; 11 | arith./logic unit; mult/div unit; 12 | FP add/sub unit; 13 | FP compae/coversion unit; 14 | FP mult unit; FP div/sqrt unit" 15 | HP PA8700,"Intarchregfile (32 8r4w) 16 | Int renregfile (56 9r4w) 17 | FP archregfile (32 8r4w) 18 | FP renregfile (56 9r4w)","2 arithlogic units; 19 | 2 shift merge units; 20 | 2 FP MAC units; 21 | 2 FP div/sqrt units" 22 | Ultra Sparc III,"Int regfile (144 7r3w) 23 | FP regfile (32 5r4w)","2 arith units; logic unit; shift unit; 24 | FP adder unit; graphic unit; 25 | FP div/sqrt unit; FP mult unit; graphic unit" 26 | Power4,"GPRS (80) 27 | FPRS (72)","2 fixed-point units; 28 | 2 floating-point units" 29 | Zen,"Int regfile (168) 30 | FP regfile (160)","4 floating-point/vector units; 31 | 4 fixed-point units" 32 | Skylake,"Int regfile (180) 33 | FP regfile (168)","4 fixed-point units; 34 | 3 floating-point/vector units" 35 | Power8,"GPRS (2×124) 36 | VSRS (2×144)"," 2 fixed-point units; 37 | 4 floating-point units; 38 | 2 vector units; 39 | decimal floating-point unit; 40 | crypto unit" 41 | 龙芯3A5000,"Int regfile (128 12r8w) 42 | FP regfile (128 8r6w)","4 fixed-point units; 43 | 2 floating-point/vector units" 44 | -------------------------------------------------------------------------------- /materials/chapter5/pio_vs_dma.csv: -------------------------------------------------------------------------------- 1 | PIO方式,DMA方式 2 | 键盘输入,网卡收包 3 | 敲击键盘,接收端收到网络包 4 | 键盘输入被记录在PS/2控制器内,网卡将收到的网络包写入内存中预先分配好的内存中 5 | PS/2控制器向处理器发送中断,网卡向处理器发送中断 6 | CPU查询中断源,发现键盘中断,CPU查询中断源,发现网卡接收中断 7 | CPU从PS/2控制器内读回键盘值,CPU从内存中读到网络包,并进行处理,初始化新的接收缓冲供网卡使用 8 | CPU清中断,CPU清中断 9 | -------------------------------------------------------------------------------- /materials/chapter6/axi.csv: -------------------------------------------------------------------------------- 1 | 引脚名称,方向,描述 2 | AWID[n:0],输出,写请求标识号 3 | AWADDR[m:0],输出,写请求地址 4 | AWSIZE[2:0],输出,写请求数据宽度 5 | AWLEN[3:0],输出,写请求数据长度 6 | AWBURST[1:0],输出,写请求类型 7 | AWAVALID,输出,写请求有效信号 8 | AWREADY,输入,写请求接收准备好信号 9 | WID[n:0],输出,写数据标识号,与写请求标识号对应 10 | WDATA[j:0],输出,写数据 11 | WSTRB[k:0],输出,写数据屏蔽信号,1位对应8个数据位 12 | WVALID,输出,写数据有效信号 13 | WREADY,输入,写数据接收准备好信号 14 | BID[n:0],输入,写响应标识号,与写请求标识号对应 15 | BRESP[1:0],输入,写响应状态 16 | WVALID,输入,写响应有效信号 17 | WREADY,输出,写响应接收准备好信号 18 | ARID[n:0],输出,读请求标识号 19 | ARADDR[m:0],输出,读请求地址 20 | ARSIZE[2:0],输出,读请求数据宽度 21 | ARLEN[3:0],输出,读请求数据长度 22 | ARBURST[1:0],输出,读请求类型 23 | ARAVALID,输出,读请求有效信号 24 | ARREADY,输入,读请求接收准备好信号 25 | RID[n:0],输入,读数据标识号,与读请求标识号对应 26 | RDATA[j:0],输入,读数据 27 | RRESP[1:0],输入,读响应状态 28 | RVALID,输入,读数据有效信号 29 | RREADY,输出,写读数据接收准备好信号 30 | -------------------------------------------------------------------------------- /materials/chapter6/ddr3_udimm.csv: -------------------------------------------------------------------------------- 1 | 引脚名称,描述,引脚名称,描述 2 | A0-A15,SDRAM地址线,SCL,EEPROM I2C总线时钟 3 | BA0-BA3,SDRAM bank地址,SDA,EEPROM I2C总线数据线 4 | RAS#,SDRAM行地址选通,SA0-SA2,EEPROM I2C从设备地址 5 | CAS#,SDRAM列地址选通,VDD,SDRAMCore电源 6 | WE#,SDRAM写使能,VDDQ,SDRAM IO输出电源 7 | S0#-S1#,SDRAM片选信号,VrefDQ,SDRAM IO参考电源 8 | CKE0-CKE1,SDRAM时钟使能信号,VrefCA,SDRAM命令地址参考电源 9 | ODT0-ODT1,SDRAM终端匹配电阻控制信号,Vss,电源地信号 10 | DQ0-DQ63,DIMM内存数据线,VDDSPD,EEPROM电源 11 | CB0-CB7,DIMM ECC数据线,NC,空闲引脚 12 | DQS0-DQS8,SDRAM数据选通线,TEST,测试引脚 13 | ,(差分对的正沿),, 14 | DQS0-DQS8,SDRAM数据选通线,RESET#,复位引脚 15 | ,(差分对的负沿),, 16 | DM0-DM8,SDRAM数据Mask线,EVENT#,温度传感器引脚(可选) 17 | CK0-CK8,SDRAM时钟信号线,VTT,SDRAM IO终端匹配电阻电源 18 | ,(差分对的正沿),, 19 | CK0-CK8,SDRAM时钟信号线,RSVD,保留 20 | ,(差分对的负沿),, 21 | -------------------------------------------------------------------------------- /materials/chapter6/ht_packet_format.csv: -------------------------------------------------------------------------------- 1 | 字节\数据位,7,6,5,4,3,2,1,0 2 | 0,命令相关内容,命令相关内容,命令,命令,命令,命令,命令,命令 3 | 1,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容 4 | 2,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容 5 | 3,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容 6 | 7 | -------------------------------------------------------------------------------- /materials/chapter6/ht_request.csv: -------------------------------------------------------------------------------- 1 | 字节\数据位,7,6,5,4,3,2,1,0 2 | 0,顺序标识,顺序标识,命令,命令,命令,命令,命令,命令 3 | 1,,顺序标识,顺序标识,设备标识,设备标识,设备标识,设备标识,设备标识 4 | 2,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容 5 | 3,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容 6 | 4,地址[15:8],地址[15:8],地址[15:8],地址[15:8],地址[15:8],地址[15:8],地址[15:8],地址[15:8] 7 | 5,地址[23:16],地址[23:16],地址[23:16],地址[23:16],地址[23:16],地址[23:16],地址[23:16],地址[23:16] 8 | 6,地址[31:24],地址[31:24],地址[31:24],地址[31:24],地址[31:24],地址[31:24],地址[31:24],地址[31:24] 9 | 7,地址[39:32],地址[39:32],地址[39:32],地址[39:32],地址[39:32],地址[39:32],地址[39:32],地址[39:32] 10 | -------------------------------------------------------------------------------- /materials/chapter6/ht_response.csv: -------------------------------------------------------------------------------- 1 | 字节\数据位,7,6,5,4,3,2,1,0 2 | 0,命令相关内容,命令相关内容,,命令,命令,命令,命令,命令 3 | 1,,,,设备标识,设备标识,设备标识,设备标识,设备标识 4 | 2,,,错误,命令相关内容,命令相关内容,命令相关内容,命令相关内容,命令相关内容 5 | 3,,,错误,,,,命令相关内容,命令相关内容 6 | -------------------------------------------------------------------------------- /materials/chapter6/ht_signals.csv: -------------------------------------------------------------------------------- 1 | 引脚名称,方向,描述 2 | TX_CLKp/TX_CLKn,输出,发送端时钟信号 3 | TX_CTLp/TX_CTLn,输出,发送端控制信号,用于区分命令包与数据包 4 | TX_CADp[n:0]/TX_CADn[n:0],输出,发送端命令地址数据复用信号,用于传输各种包 5 | RX_CLKp/RX_CLKn,输入,接收端时钟 6 | RX_CTLp/RX_CTLn,输入,接收端控制信号,用于区分命令包与数据包 7 | RX_CADp[n:0]/RX_CADn[n:0],输入,接收端命令地址数据复用信号,用于传输各种包 8 | -------------------------------------------------------------------------------- /materials/chapter6/pcie_signals.csv: -------------------------------------------------------------------------------- 1 | 引脚名称,方向,描述 2 | TXp/TXn[n:0],输出,发送信号 3 | RXp/RXn[n:0],输入,接收信号 4 | -------------------------------------------------------------------------------- /materials/chapter7/reg_multiplex.csv: -------------------------------------------------------------------------------- 1 | 偏移,名称(初始化设置下,0x3[7] = 1),名称(工作模式下,0x3[7] = 0) 2 | 0x0,分频锁存器低位,数据寄存器 3 | 0x1,分频锁存器高位,中断使能寄存器 4 | 0x2,读的时候为中断标识寄存器,写的时候为FIFO控制寄存器,读的时候为中断标识寄存器,写的时候为FIFO控制寄存器 5 | 0x3,"线路控制寄存器。其中比特7为分频控制访问使能。该位为1时可以访问表中“初始化设置”寄存器,为0时访问表中“工作模式”寄存器","线路控制寄存器。其中比特7为分频控制访问使能。该位为1时可以访问表中“初始化设置”寄存器,为0时访问表中“工作模式”寄存器" 6 | -------------------------------------------------------------------------------- /materials/chapter7/serial_status.csv: -------------------------------------------------------------------------------- 1 | 位域,位域名称,位宽,访问,描述 2 | 7,ERROR,1,R,"错误表示位 3 | ‘1’ – 至少有奇偶校验位错误,帧错误或打断中断的一个。 4 | ‘0’–没有错误" 5 | 6,TE,1,R,"传输为空表示位 6 | ‘1’ – 传输FIFO和传输移位寄存器都为空。给传输FIFO写数据时清零 7 | ‘0’–有数据" 8 | 5,TFE,1,R,"传输FIFO 位空表示位 9 | ‘1’ – 当前传输FIFO为空,给传输FIFO写数据时清零 10 | ‘0’–有数据" 11 | 4,BI,1,R,"打断中断表示位 12 | ‘1’ –接收到起始位+数据+奇偶位+停止位都是0,即有打断中断 13 | ‘0’–没有打断" 14 | 3,FE,1,R,"帧错误表示位 15 | ‘1’ – 接收的数据没有停止位 16 | ‘0’–没有错误" 17 | 2,PE,1,R,"奇偶校验位错误表示位 18 | ‘1’ – 当前接收数据有奇偶错误 19 | ‘0’–没有奇偶错误" 20 | 1,OE,1,R,"数据溢出表示位 21 | ‘1’ – 有数据溢出 22 | ‘0’–无溢出" 23 | 0,DR,1,R,"接收数据有效表示位 24 | ‘0’ – 在FIFO中无数据 25 | ‘1’–在FIFO中有数据" 26 | -------------------------------------------------------------------------------- /materials/chapter7/space_allocation.csv: -------------------------------------------------------------------------------- 1 | 设备号,名称,BAR号,大小,起始地址,结束地址 2 | 1,USB控制器,0,4KB,0x48015000,0x48015FFF 3 | 2,显示控制器,0,128MB,0x40000000,0x47FFFFFF 4 | 2,显示控制器,1,64KB,0x48000000,0x4800FFFF 5 | 3,网络控制器,0,4KB,0x48014000,0x48014FFF 6 | 3,网络控制器,1,16KB,0x48010000,0x48013FFF 7 | -------------------------------------------------------------------------------- /materials/chapter7/space_requirement.csv: -------------------------------------------------------------------------------- 1 | 设备号,名称,BAR号,大小 2 | 1,USB控制器,0,4KB 3 | 2,显示控制器,0,128MB 4 | 2,显示控制器,1,64KB 5 | 3,网络控制器,0,4KB 6 | 3,网络控制器,1,16KB 7 | -------------------------------------------------------------------------------- /materials/chapter8/3-8decoder_true_table.csv: -------------------------------------------------------------------------------- 1 | 输入1,输入2,输入3,输出1,输出2,输出3,输出4,输出5,输出6,输出7,输出8 2 | C,B,A,Y~0~,Y~1~,Y~2~,Y~3~,Y~4~,Y~5~,Y~6~,Y~7~ 3 | 0,0,0,1,0,0,0,0,0,0,0 4 | 0,0,1,0,1,0,0,0,0,0,0 5 | 0,1,0,0,0,1,0,0,0,0,0 6 | 0,1,1,0,0,0,1,0,0,0,0 7 | 1,0,0,0,0,0,0,1,0,0,0 8 | 1,0,1,0,0,0,0,0,1,0,0 9 | 1,1,0,0,0,0,0,0,0,1,0 10 | 1,1,1,0,0,0,0,0,0,0,1 -------------------------------------------------------------------------------- /materials/chapter8/8-1selector_true_table.csv: -------------------------------------------------------------------------------- 1 | 输入1,输入2,输入3,输出 2 | C,B,A,Y 3 | 0,0,0,D~0~ 4 | 0,0,1,D~1~ 5 | 0,1,0,D~2~ 6 | 0,1,1,D~3~ 7 | 1,0,0,D~4~ 8 | 1,0,1,D~5~ 9 | 1,1,0,D~6~ 10 | 1,1,1,D~7~ 11 | -------------------------------------------------------------------------------- /materials/chapter8/IEEE754float.csv: -------------------------------------------------------------------------------- 1 | null,符号,阶码,尾数,值,符号1,阶码2,尾数3,值4 2 | 正无穷,0,255,0,∞,0,2047,0,∞ 3 | 负无穷,1,255,0,-∞,1,2047,0,-∞ 4 | 非数(NaN),0或1,255,≠0,NaN,0或1,2047,≠0,NaN 5 | 规格化非0正数,0,0