計算機系統 學習筆記(0)南京大學(一)第一周

課程:計算機系統基礎

核心理念:人類世界與計算機世界的異同

  • 人類世界
    • 直觀感受
    • 數學
  • 計算機世界
    • 與數學不同,存儲首先,各層次與現實世界不同

我們關注點是差異點!

一樣的你就不用關心了,關心差異!差異在哪里呢?

  • 計算機存儲是首先了
  • 編譯器規則
  • 編碼轉換規則
  • ……

計算機這個工具,最重要的就是將人類思維產物,使用計算機實現

因此說,有很多地方,是直接可以直觀地去實現邏輯思維過程的(語義上就能理解),但是也有計算機的一些特點,需要我們專門去把握(從計算機本身處理方式和規則去理解)!

面向機器描述,機器級語言:機器語言和匯編語言

二者都是面向機器結構的語言,與機器有關,不同機器(不同的系統結構)就不一樣了,移植性不好。

面向算法描述:高級語言

根據人的邏輯思維方式,產生的產物來編程,越來越接近人類思考方式。機器無關!因為內些部分交給編譯器處理了,編譯器來完成機器相關性的處理,這也是一種封裝

執行hello world程序

在這里插入圖片描述

這里值得注意的關鍵點是緩存技術,我們將存儲器進行分層設計,從而 平衡了存儲的容量、速度和價格等多方面因素:

  • 緩存1:磁盤存儲可執行程序的二進制信息,速度慢容量大價格低
  • 緩存2:執行程序的時候調入內存中,速度比磁盤快的多
  • 緩存3:內存中的二進制代碼調入cache中,速度更快
  • 緩存4:cache內容調入到CPU寄存器中,速度最快

我們可以體會到,計算機通過多層次緩存完成了程序的一步步緩沖,通過CPU控制它們,從而有了我們現在看見的計算機系統。

使用高級語言開發程序需要的環境

在這里插入圖片描述

早期原始程序開發方式

在這里插入圖片描述

早期沒有高級語言,也沒有那么多的復雜上層環境,我們只需要直接使用匯編語言/機器語言輸入到計算機中執行即可,這個過程,對于計算機來說很簡單,也不需要有太多復雜的處理,但是對于人類來說,編程是一件非常痛苦的事情啊……

現代高級語言程序開發方式

高級語言的但是,解決了匯編語言開發時代的困難,不過也因此,計算機需要處理的工作復雜起來了,也就是,人類世界通往計算機世界的通道變復雜了

在這里插入圖片描述
那么這里都具體包括了什么呢,我們依次說明一下

人類世界:高級語言

我們發明高級語言,其實是一種對計算機的權衡與妥協。

高級語言

  1. 相對來說比較符合人類思維,雖然不是自然語言,但是人類也容易接受
  2. 計算機也容易接受高級語言,如果是自然語言,那計算機是接受不了的

權衡之下,高級語言成了人類與計算機世界溝通的通行語言。就像英語是國際通行語言內樣。

任何事務都有實體抽象,人類的是:

  • 實體:人類的肉體
  • 抽象:高級語言

橋梁/通道

橋梁和通道,也可以叫翻譯官,它負責連接人類世界和計算機世界

  • 傳入和轉換
    • 傳入:鍵盤,鼠標
      • 通過鍵盤和鼠標,還有文本編輯器,我們就能夠往計算機中輸入高級語言并存儲在磁盤中 ,完成源程序的編輯
    • 轉換:人類世界傳入的,它給轉換成計算機世界能夠接受的
      • 對于源程序,我們需要進行一系列的轉換,最終將其轉換為二進制
      • 源程序 –編譯器–> 匯編代碼 –匯編器–> 可重定位二進制 –鏈接–> 二進制的可執行文件
  • 傳出和轉換
    • 傳出:顯示器
      • 計算機傳出信息,通過顯示器轉換為人類可以識別的信息
    • 轉換:計算機世界傳出的,它給轉換為人類世界能夠接受的

它的實體和抽象是

  • 實體:鍵盤、鼠標、顯示器、存儲器…
  • 抽象:轉換邏輯(邏輯的實現構成了編譯器、匯編器等)

計算機世界:二進制的世界

計算機世界是最終處理二進制指令和數據的地方。

  • 實體:CPU
  • 抽象:ISA,指令集架構

大管家:操作系統

在這里插入圖片描述
操作系統負責接收CPU發出的控制信號,負責管理計算機世界以及橋梁的各種控制方式。

操作系統也接收人類世界發出的命令,讓計算機執行,也就是人機接口

計算機的發展:抽象層次不斷提高

ISA是計算機硬件的抽象。

ISA與微架構

微架構就是指令集架構的實現形式,是硬件實現。同一個ISA,可以有不同的微架構來實現,只要完成了ISA規范即可

在這里插入圖片描述

不同指令的組合,實現了通用計算機,否則,如果只能是固定的程序,那就是專用計算機了,就像現在的量子計算機“九章”一樣,是專用量子計算機,是不可編程的

先設計,再實現;先抽象,再具象

對于計算機的發展過程來說,是自底向上一層層抽象和封裝的。

但是對于程序員來說,通常是先設計,再實現,也就是從人類思維出發,先完成抽象,再進行實現的,是自上而下的。當然這不是絕對是,人類的思維過程更多會受到整體性的、系統思維的影響。

計算機層次結構

ISA是最重要的層次,它向下影響硬件結構,向上影響操作系統等。

指令集架構是計算機硬件結構的抽象,然后,對于抽象出來是指令,我們可以對其進行各種排列組合,根據人類的抽象思維,來編寫程序,讓硬件運行起來,指令是可以有各種排列組合的,這也就是通用計算機

我們編寫的程序,如果直接運行,那就只有3層結構,是最原始的通用計算機。

在這里插入圖片描述

后來人類發明了助記符,形成了匯編語言,它與機器語言一一對應,但是需要翻譯,因此需要匯編器,人類需要編輯匯編指令,也需要管理,因此就初代的操作系統,此時,一個能夠實現匯編語言程序設計的二代計算機就誕生了。

在這里插入圖片描述
再后來,操作系統演變更加復雜,同時高級語言和編譯器也有了,這是現代經典計算機雛形。

在這里插入圖片描述
計算機的發展,實現了一層層的抽象和封裝,讓人類成了會飛的湯姆貓

這沒什么不好的,但是身為計算機專業人士,我們需要足夠了解底層機制,如果哪一天幫助飛行的火箭不好用了,我們也能分析原因并處理。

  • 指令集架構ISA是對計算機硬件的抽象
  • 操作系統是對ISA的抽象和保護,它對外僅提供API
  • 編譯器匯編器,以及編程語言,調用了操作系統的接口,也就是它提供的系統調用,完成了高級語言的庫函數,對程序員進行了進一步封裝
  • 程序員現在更多需要關注的是做什么,而不是怎么做,因為大多的功能都被足夠的優化和封裝了,人類,就應該更多思考人類該做的事情,機器能做的讓它自動做,人類就不用思考了,但是,人類必須懂機器在做的事情,這本身就是人類發明的,不懂底層,干啥啥不行

ISA

ISA說白了就是規范,人們都要按照這個規范去設計計算機硬件和軟件,從而讓所有遵循規范的人能夠互通有無,提高溝通效率。編程語言是唯一全球化的通用語言,這非常酷!

微架構

至于微架構,就是ISA的硬件實現,只需要指定,同樣的ISA,可以使用各種各樣的微架構實現,這很好理解不是嗎,就好比單周期CPU和流水線CPU內樣,或者一個乘法指令可以有很多具體實現方式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384627.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384627.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384627.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

x86架構下 CF與OF標志位 帶符號和無符號運算 詳解

針對能夠影響OF和CF標志位的指令,一般來說是涉及到數據運算的指令,這里使用add舉例,即不區分有無符號的加法指令,參與運算的數據,從二進制層級去考慮。 CF標志位 對于CF,它是carry flag,進位標…

tmux學習筆記

參考學習鏈接 我們需要理解幾個重要的概念 session 回話window 窗口pane 窗格 window 我們打開的一個terminal就是一個window. 而打開的這個window,也就是打開了一個session,打開window,session開始;關閉window,se…

安裝win10和Linux雙系統的個人經驗

使用easy uefi誤刪除win10引導文件 這個時候,網上教程有各種方式,我直接使用了一種最簡單的,這個方法網上都沒有提到過。 注意:發現引導文件刪了,千萬不要關機,否則再想開機恐怕只能重裝系統了。 我們直…

Linux的ext4文件系統學習筆記

補充:設備獨立性 Linux中,設備驅動以文件形式表示,用戶操作邏輯設備就是操作文件,而不是具體的物理設備,也就是說,用戶操作的是功能,是黑箱,而不是真正的實體。 APP操作的都是邏輯…

html基礎元素案例筆記(1)

這是代碼 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>CSS FlexBox test</title><link rel"stylesheet" type"text/css" href"./css/index.css"></head><body>…

C語言中的struct和union區別

參考&#xff1a;Difference between Structure and Union in C 二者區別 struct 這里不做詳細說明&#xff0c;因為參考鏈接中都寫明了。只做一些重點強調。 struct中聲明的變量&#xff0c;在分配空間的時候&#xff0c;struct結構空間大小&#xff0c;大于等于其內部所有…

C語言多文件編譯鏈接為1個可執行文件的簡單原理

參考1&#xff1a;C header files and compilation/linking 參考2&#xff1a;計算機系統基礎&#xff08;一&#xff09;袁春風 &#xff08;符號鏈接部分&#xff09; 我們現在有一個簡單的工程&#xff0c;有這么幾個文件 1.t1.h extern int x;void tt();t1.c #include &…

Java讀寫二維數組到文件

1. 創建文件 使用了File類中的createrNewFile方法。 public static boolean createFile(String filename){try{File file new File(filename);file.createNewFile();return true;} catch (IOException e) {e.printStackTrace();return false;}}查閱文檔可知&#xff0c;若文件…

如何掌握java API的方法

如何掌握方法的使用&#xff1f; 查文檔文檔不一定看得懂&#xff0c;親自試一試就知道了&#xff01; 這倆方法沒啥好說的&#xff0c;自己體會即可&#xff01; 注意&#xff01;先看原版英文文檔&#xff0c;然后自己試一試&#xff0c;就能更加理解了&#xff0c;然后&a…

Leetcode1512. 好數對的數目 抽出本質原型 利用范圍條件

解法1&#xff1a;暴力枚舉 class Solution {public int numIdenticalPairs(int[] nums) {int count 0;for(int i 0;i < nums.length; i){for(int j i 1; j < nums.length; j){if(nums[i] nums[j])count;}}return count;} }沒啥可說的&#xff0c;就是小學數學問題…

leetcode面試題 10.01. 合并排序的數組

直接排序 直接使用Java已有的方法進行排序&#xff0c;這一招…大意了&#xff01; 這題簡單&#xff0c;就是個基本的排序&#xff0c;后面難題&#xff0c;可能這只是一小步&#xff0c;內個時候直接用排序算法比較合適&#xff0c;這個不合適。。 class Solution {public…

IA-32 Architecture: the function of segment regitster(CS DS SS ES)

對于IA-32架構&#xff0c;與8086不同&#xff0c;段寄存器不再是像以前一樣&#xff0c;直接作為段基址&#xff0c;因為32位的寄存器直接就可以表示4GB大小&#xff0c;不需要再偏移&#xff0c;因此段寄存器的含義也發生了相應的變化。 在IA-32架構里&#xff0c;段寄存器是…

x86異常處理與中斷機制(1)概述中斷的來源和處理方式

參考《計算機組成》&#xff08;北京大學 MOOC&#xff09; 1 異常與中斷的來源&#xff08;為什么需要中斷&#xff09; 首先&#xff0c;說明一下異常和中斷這兩個概念。 它們兩個唯一的區別&#xff0c;就是&#xff0c;沒有什么區別。只是不同的地方不同的時間不同的人的…

【C language】typedef的使用:結構體、基本數據類型、數組

typedef基本數據類型 typedef int a; a abc;后面的a abc就等價于int abc typedef結構體 typedef struct a {int a;int b; } abc;abc aaa;對于上述&#xff0c;abc aaa;就等價于struct a aaa; 簡而言之&#xff0c;typedef的本質&#xff0c;就是構建等價關系。 第一個例…

【C language】動態數組的創建和使用

在C語言中&#xff0c;使用malloc函數創建動態數組&#xff0c;使用一個指針指向它&#xff0c;使用下標進行訪問。 unsigned long *a (unsigned long *)malloc(2 * sizeof(int)); a[0] 1000; a[1] 2000; printf("%d %d\n", a[0], a[1]); free(a);上述例子&…

x86異常處理與中斷機制(2)中斷向量表

補充&#xff1a;事件不僅包含中斷和異常&#xff0c;還包含系統調用&#xff0c;這個屬于用戶主動請求的事件。 上一節&#xff0c;只有一個溢出異常&#xff0c;那么&#xff0c;如果很多異常、中斷呢&#xff1f;&#xff08;中斷向量表&#xff09; 另外&#xff0c;之前0…

x86異常處理與中斷機制(3)中斷處理過程

上一節講完了根據中斷類型號找中斷服務程序的過程&#xff0c;現在著重說明一下更加完整的中斷處理過程吧。 本節以8086時代的中斷處理過程為例進行說明&#xff0c;主要分兩大部分 硬件處理軟件處理 需要注意&#xff0c;這不是絕對的&#xff0c;得看實際情況&#xff0c;…

Linux 0.11 內核解析:中斷相關(1)asm.s文件中斷處理分析

0 源代碼 有兩個版本的&#xff0c;一個是帶中文注釋&#xff0c;Intel格式的&#xff1b;一個是不帶注釋是AT&T格式的。 Linux 0.11 中文注釋版 Linux 0.11 源碼&#xff0c;基于《Linux內核完全注釋》趙炯 1 asm.s 文件 我們先假設該文件處理的中斷是無特權過渡的情況…

【精華文】C語言結構體特殊情況分析:結構體指針 / 基本數據類型指針,指向其他結構體

參考鏈接&#xff1a;Structure pointer pointing to different structure instance 注&#xff1a;可以查看此篇的問題和唯一的回復&#xff0c;那是相對正確的&#xff0c;不要看comment&#xff0c;有很多錯誤。 我是拒絕分析這種問題的&#xff0c;因為似乎沒有人會這么亂用…

enum in c language

今天說說C語言中的枚舉。 參考&#xff1a;Enumeration (or enum) in C 1 定義 定義一個枚舉類型很容易&#xff1a; enum aa { a1, a2, a3 };這里 enum是關鍵字aa是枚舉變量&#xff0c;也就是我們自定義類型a1,a2,a3是枚舉成員 然后怎么使用呢&#xff1f; 首先&#…