中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

程序員應該了解的計算機知識(一)——基礎理論

前記

   對于半道入行編程的程序員,大部分對計算機的工作原理的了解都是有限的,這些了解大部分都是在日常工作中去了解的,其實對應程序員來說不用深入了解理解計算機基本原理就足以應付當前的工作需要。然而多了解總比不了解要強,這也是筆者要整理此片文章的由衷。

創新互聯主營臨桂網站建設的網絡公司,主營網站建設方案,成都App制作,臨桂h5小程序開發搭建,臨桂網站營銷推廣歡迎臨桂等地區企業咨詢

計算機系統概述

1.計算機的分類

   步入21世紀的你,如果還不知道“計算機”,那你真的是OUT了。計算機是20世紀人類最偉大的可選成就之一,話說計算機從總體上來說可分為電子模擬計算機和電子數字計算機兩大類。電子模擬計算機主要是通過電壓電流模擬實現連續的數值運算,常被一些實驗室的科研人員所熟知;而被大眾所熟知的則是電子數字計算機,也就是我們稱之為的“電腦”,其主要是通過模擬數字實現非聯系的位運算。

   數字計算機根據計算機效率、速度、適用性等特點,通常又分為專用計算機和通用計算機兩類。專用計算機,顧名思義,其是專門為完成某一類工作而設計的,所以其完成這項工作的效率極高,但是其適用性就大打折扣了。通用計算機并非是為完成莫一項任務而設計,能夠兼容性完成多項任務,按照簡易程度、性能等特點又可以分為巨型機、大型機、中型機、微型機和單片機六類,其體積、功能、數據存儲量、指令系統等從前到后依次高升,但是其簡易性則依次降低。巨型機通常也成為“超級計算機”,其結構復雜,運算速度極快,數據存儲量大,但是足夠龐大;大中小型計算機主要是根據其體積來衡量劃定的;微型機簡稱為“微機”,就是常見的個人計算機(PC),其是由大規模的集成電路組成的體積較小的計算機;單片機則是最為簡單的計算機,其主要是集成電路組成,以至于其體積小,結構簡單。這些劃分只是根據其特點來區分的,隨著大規模集成電路的迅速發展,今天的小型機可能是明天的微型機,而今天的微型機可能是明天的單片機。

2.計算機的組成

   計算機主要由硬件系統和軟件系統兩部分組成(相信是人都應該看的到,硬件是有型的實體,而軟件則是有型的虛構體),其中硬件構成了計算機的物質基礎,軟件則是計算機系統的應用基礎。通俗的說,軟件就是計算機上能看得到(當然也有看不到的)但是摸不到的能夠協助完成工作的應用程序,例如Windows系統、硬件驅動程序等其他應用程序;而硬件則是計算機的基本組件,是看得到摸得到的物體,例如主板、CPU等。

2.1.硬件系統組成

   從理論上講,計算機的硬件系統主要由運算器、存儲器、控制器、輸入設備和輸出設備五大部分組成(從名字上即可看出各個部件的作用),這種劃分方式稱為“馮諾依曼體系結構”。

  • 運算器

   運算器(Datapath),顧名思義就是進行運算的執行部件。其主要功能是對數據進行運算的加工處理操作,包括加、減、乘、除等數學算術運算和與、或、非等邏輯運算。運算器主要由運算邏輯單元(ALU)和寄存器兩部分元件組成,其中寄存器用于提供參與運算的數據或臨時保存運算結果。通常情況下運算器集成于CPU中央處理器中。

   實質上運算器采用的二進制數制系統,其參與運算的數是有二進制表示(因為二進制數的運算規律非常簡單,在電子線路中可以靈活的表示電子元件的狀態,其比較容易實現而且設備最省)。在運算過程中,位數越多則運算精度越高,則其所需的電子元件就越多,現在常見的計算機運算器支持的位數有8位、16位、32位或64位。

  • 存儲器

   存儲器(Memory),顧名思義就是用于存儲數據的部件。其主要功能用于存放程序與數據(程序是計算機操作的依據,數據是計算機操作的對象),程序和數據在存儲器中以二進制的方式表示,每8位二進制數碼劃分為一個存儲單元,必須通過地址來訪問該單元,地址其實就是這個存儲單元的編號。

   存儲器主要由存儲體、地址寄存器與譯碼線路、讀寫電路與數據寄存器、控制線路等元件構成;通常情況下存儲器可分為內部存儲器和外部存儲器兩大類,內部存儲器就是我們常說的內存(也稱為主存),外部存儲器也就是常說的硬盤、U盤等,也成為外存或輔存,一般情況下外部存儲器也作為輸入/輸出設備。

  • 控制器

   控制器(Control),是整個計算機的控制中心,主要用來協調計算機各個組件的工作,完成程序信息的處理和數據的輸入/輸出。它一般由指令寄存器、狀態寄存器、指令編碼器、時序電路和控制電路組成。簡而言之,控制器就是協調指揮計算機各個部件工作的組件。通常情況下控制器集成于CPU中央處理器中。

   程序是由指令序列組成的,其實執行程序就是逐條執行指令的過程,實質運算器所完成的每一步運算操作就是一條指令。指令是由操作碼和地址碼組成,其實都是二進制數碼,其中操作碼即表示指令所要進行的操作,例如加、減、存、取等操作,地址碼表示參與運算的數據的地址,即在存儲單元中的位置。控制器就是解析這條指令,然后從存儲單元中取出數據,并進行相應的操作運算。

   計算機在進行計算機時,指令必須按順序一條一條的執行。控制器的基本任務就是按照指令序列的順序,先從存儲器取出一條指令放到控制器中,并對該指令的操作碼由譯碼器進行解析,然后根據譯碼對應的操作進行相應的動作行為,這就是執行指令的過程;接著取出第二條指令,按照上述順序進行執行。過程中控制器會通過指令計數器來控制取指令的當前位置,每取出一條指令其計算器就會加1,為取下一條指令做好準備。

  • 輸入/輸出設備

   輸入設備(Input System),輸入設備是計算機的重要外部設備,其主要作用是將程序、原始數據、文字、字符、控制命令或現場采集的數據等信息輸入到計算機,并轉換為二進制格式保存在內存中。常見的輸入設備有鍵盤、鼠標器、光電輸入機、磁帶機、磁盤機、光盤機等。

   輸出設備(Output System),輸出設備是計算機的重要外部設備,其主要作用是將計算機的運算中間結果或最終結果、機內的各種數據符號及文字或各種控制信號等信息展示給用戶。常見的輸出設備有顯示器、打印機、繪圖儀、音箱、投影儀等。

  • 總線

   除過上面介紹的五部分外,計算機系統中還必須包括另一個部件——總線。總線是一組為系統部件之間數據傳送的公用信號線。具有匯集與分配數據信號、選擇發送信號的部件與接收信號的部件、總線控制權的建立與轉移等功能。典型的微機計算機系統的結構通常多采用單總線結構,一般按信號類型將總線分為三組,其中AB(Address Bus)為地址總線;DB(Data Bus)為數據總線;CB(Control Bus)控制總線。計算機通過總線將五大部件連接起來,總線是它們相互通信的公共通路,主要任務是在各部件之間傳送地址信息、數據信息和控制信息。

2.1.硬件實物組成

   從實物上看,一般PC包括鍵盤、鼠標、顯示器、主機等大型部件組成,而主機則是計算機的主體部分,包括CPU、主板、內存條、顯卡、聲卡、網卡、硬盤以及其他媒體驅動器組成(這些都是通常聽到的可見的實體物件)。

  • 主板

   主板,又稱主機板(Main Board)、系統板(System Board)或母板(Mother Board),是計算機最重要的部件之一。主板上包含了計算機的主要電路系統,所有的計算機其他組件必須直接或間接依賴主板,計算機的性能主要取決與主板。主板其實可以看作一個設有多個接口的電路板,其中主要包括芯片、插槽、外設接口三大類組件。

   芯片類主要有BIOS(Basic Input/Output System)芯片,南北橋芯片和RAID控制芯片等。BIOS芯片,即基本輸入/輸出系統芯片,它是一個存儲器,內部保存著與主板搭配的基本輸入輸出系統程序,這個程序由芯片制造商制作并固化在芯片上的;也可以說BIOS其實是一個底層軟件,用于控制計算機的底層的輸入輸出操作,這個軟件可以識別各種硬件,還可以設置引導系統的設備,系統時間以及調整CPU外頻等。因為BIOS是存儲在BIOS芯片中的,而不是類似其他的外部存儲器中,所以通常稱為“固件(Firmware)”。隨之技術的不斷發展,現在的BIOS也支持重新寫入,可以使計算機獲得更好的性能和支持。 南/北橋芯片是兩個通信橋梁的兩個芯片,合成芯片組。南橋芯片主要負責硬盤等存儲設備和PCI之間的數據流通;北橋芯片主要負責處理CPU、內存和顯卡三者間的數據流通,一般發熱量較大,位于散熱裝置附近。RAID控制芯片,主要用于支撐硬盤。

   插槽類主要有CPU插槽、內存插槽、PCI插槽、PCI Express插槽等。CPU插槽用于安裝CPU部件,CPU部件必須與主板相互兼容才可以安裝。內存插槽主要用于安裝內存條的卡槽,內存種類、數量和容量都有內存插槽決定。PCI插槽主要用于安裝調制解調器、聲卡、網卡等設備。PCI Express插槽主要用于安裝顯卡部件。

   外設接口類主要有硬盤接口、COM接口(串口)、PS/2接口、USB接口、LPT接口(并口)、MIDI接口等。硬盤接口可分為IDE接口和SATA接口,現在大多都是SATA硬件驅動器接口,這個接口的傳輸數據效率更高。COM接口用于連接串行鼠標和外置調制解調器(Modem)等設備,基本被淘汰。PS/2接口用于連接鍵盤或鼠標,臺式機存在。USB接口使用較為廣泛,大多數外置設備都支持這個接口,該接口支持即插即用。LPT接口用于連接打印機或掃描儀等。MIDI接口主要用于MIDI設備,用于與其它控制設備相互通信。

   綜上所述,主板在計算機中起到了舉足輕重的作用,通過各種控制信號來管理各種電子容器,從而達到不同的效果,幾乎所有的外設接口都直接或間接的與主板相關聯,大部分的硬件設備必須與主板相兼容才能正常運行,也可以說主板可以決定其它的部件。主板可以看著各個部件協調工作的場所,提供各個不僅相互協調工作的數據流通,主板內部自身供電裝置維護其內部BIOS的運行。

  • CPU

   CPU(Central Processing Unit),一個耳熟能詳的組件,被親切的稱之為“中央處理器”,它是整個計算機的運算核心和控制核心。其主要功能是解釋計算機指令以及處理程序中的數據。CPU由運算器(包含寄存器)和控制以及總線組成,CPU的工作過程分為提取(Fetch)、解碼(Decode)、執行(Execute)和寫回(Writeback)四個步驟。

   程序是有指令(指令就是二進制數碼組合)構成的序列,執行程序就是按指令序列逐條執行指令。當打開某個程序時,會由運行平臺將該程序解析為指令序列并保存在存儲器中,然后CPU取出指令序列逐條執行。CPU首先從存儲器或高速緩沖存儲器中檢索指令;然后根據CPU固有的指令集架構(ISA)的定義將提取的指令數值解釋為CPU能夠識別的指令碼(運算碼和運算目標等);緊接著執行CPU指令碼,根據指令碼對應的控制信號連接到各種能夠進行所需運算的其它部件并控制其作出相應動作,從而達到運算效果;最終將運算結果寫回到CPU內部的寄存器(暫存器),CPU運算大致就是這個過程。

   CPU是計算機最重要的組件之一,提供指令控制、操作控制、時間控制、數據加工等功能,其中指令控制主要是指控制指令執行的順序;操作控制主要是指根據對應的指令產生相應的操作控制信號發送給相應的部件并控制這些部件按指令的要求進行動作;時間控制主要是指對各種操作定制時間的的設定;數據加工是最重要的功能,主要是進行數據的運算處理。

   CPU的性能決定了計算機的性能,然而外部又受主板的牽制。CPU的字長、工作頻率、Cache容量、指令系統和邏輯結構決定了一個CPU的性能,其中字長表示CPU一次最多可同時傳送和處理的二進制數碼位數,現在常見的有32位和64位;工作頻率(也稱主頻)就是CPU的處理數據的速度,單位為兆赫茲(MHz)或千兆赫茲(GHz),通常情況下頻率越高運算數據的速度越快,當然這只是一個大致概念,通常情況下CPU的實際運算速率還受CPU的流水線、總線等各方面性能的影響;緩存(Cache)容量也是CPU處理數據速率的重要指標,緩存主要用于臨時存儲指令或參與CPU運算的數據,減少數據傳輸的時間,現在的CPU大多設有2級緩存;CPU指令系統是CPU內部基礎的與硬件電路相配合的指令系統,也成為指令集,是CPU處理數據效率的重要衡量標準,指令集用于控制各個部件的協調工作。

   綜上所述,CPU是計算機的“大腦”,是控制其它組件協調工作的的部件,是計算機數據運算的場所。CPU內部包含了其獨立的指令集,所有的程序都將被解析為該CPU對應的指令序列才能正常執行,CPU必須具備數據通信,資源共享,分布式處理和提供系統可靠性等特點。理論上將CPU頻率越高、指令系統越高級、緩存越大,其處理數據的數度就越快,然而其必須要與對應的主板相兼容才可體系性能,否則將無法運行,即時可以運行則也是大材小用。

  • 內存條

   內存條也是計算機的重要組件之一,是計算機中最為主要的寄存器。內存條在計算機中主要作用是緩沖數據和數據交換,主要負責硬盤等存儲器與CPU通信的臨時數據的傳輸或存儲。程序在運行時會將與程序相關的指令信息加載到內存中,CPU直接與內存進行通信,來提取指令信息并執行,CPU在內存中通過直接尋址的方式進行提取指令信息。舉個最簡單的例子就是我們寫入一個記事本文件時,如果沒有保存則其記事本中的字符信息都保存在內存中,當保存后才會寫到硬盤上。

   常說的內存大多數指的就是內存條,但也不完全是。內存是一種存儲單元,包括隨機存儲器(RAM)、只讀存儲器(ROM)和高速緩存(Cache)三部分。ROM(Read Only Memory)是只讀存儲器,可以說任意一個硬件都對應一個ROM存儲器,用于存儲硬件本身的信息或其相應的應用程序,其特點是斷電后信息不會丟失,最常見的就是BIOS芯片,不過現在的BIOS芯片都可以復寫,但是大多數還是稱為BIOS ROM;RAM(Random Access Memory)是隨機存儲器,它既可以寫入數據也可以讀取數據,可以不斷的復寫數據,其特點是斷電后存儲的數據會丟失。其內存條就是將RAM集成在一個插卡上以減少RAM的空間,所以常說的內存條就是指內存。

   隨著科技的發展,現在的內存條的存儲空間也越來越大,臨時存儲的數據也越來越多,所以擁有大內存的計算機遠比小內存的計算機運行要流暢,然而并不是越大的內存空間就越好,其首先收到主板的牽制,其次還收到CPU總線的限制,如果CPU總線不及則又是大材小用,如果內存空間不足則CPU無法最高效運作。

   綜上所述,內存條也是計算機的必要組件之一,大內存的內存條往往會是計算機的程序運行更流暢,但是前提是必須與主板接口相兼容。

  • 顯卡

   顯卡全稱顯示接口卡,也稱顯示適配器、顯示器配置卡,是PC中一個重要的組件,主要用于將計算機系統輸出的信息進行轉換并向顯示器提供掃描信號。顯卡基本上包括GPU(Graphic Processing Unit,圖形處理器)、顯存兩個重要部件。

   GPU,即圖形處理器,相對應CPU的一個概念,在早期圖形處理部分主要由CPU來完成,而現在圖形處理變得越來越重要,所以必須一個核心的圖形處理器來完成這個工作,從而減少對CPU的依賴,所以就出現了GPU,主要用于將輸出信號進行幾何轉換和光照處理以及像素和色彩渲染等處理。顯存是顯示內存的簡稱,其和內存的作用基本一致,其主要用于暫時存儲顯示芯片要處理的數據和處理完畢的數據,通常情況下顯存越大其圖形顯示的性能就越強。

   現在的顯卡基本分為獨立顯卡、集成顯卡兩大類,其中集顯就是將顯示芯片、顯存等集成在主板上;獨顯則是將顯示芯片、顯存等坐在一個插卡上,通過主板接口插槽插入運行,當然現在也有雙顯卡兼容工作的模式。需要注意的是顯卡也受主板的約束。

  • 聲卡

   聲卡,亦稱為音頻卡,是多媒體技術中的基本組成部分,實現聲波/數組信號相互轉換的一種組件。聲卡主要用于將原始聲音數據轉換為聲音信號并輸出到不同的聲響設備。聲卡主要包括聲音控制芯片、數字信號處理器等部件組成。

   聲音控制芯片主要將從輸入設備中獲取的聲音模擬信號通過模數轉換器,將聲波信號轉換為一串數字信號并存儲在儲存器中;數字信號處理器是一種聲音數字處理器,將信號交由該處理器處理減輕了CPU的工作負擔。

   現在聲卡基本分為板卡式、集成式和外置式三種接口類型。

  • 網卡

   網卡,全稱網絡接口板,又稱通信適配器或完了接口卡(NIC,Network Interface Card)。網卡是計算機進行網絡通信必備的硬件設備,它屬于網絡協議(OSI模型)中的鏈路層組件,主要用于網絡中電信號的匹配、傳輸、編碼和解碼等工作。

   網卡主要有處理器和存儲器兩大部件組成,其中存儲器,也就是網卡的ROM中保存這該網卡的基本信息,其中有標識該網卡唯一的MAC地址,是一個獨一無二的48位串行號(任何兩塊網卡的MAC地址都不會重復);處理器則用于對電信號進行傳輸、解碼以及編碼工作(在網絡通信中實際傳輸的是電信號,由網卡負責將電信號進行編碼和解碼)。

   網卡在局域網之間的通信是通過電纜或雙絞線以串行傳輸方式進行的,而在計算機之間的通信則是通過計算機主板上的I/O總線以窗口并行傳輸方式進行的。所以網卡的一個重要功能就是進行串行/并行轉換。網卡一般具備數據的封裝和解封、鏈路管理以及編碼(曼徹斯特編碼)和移碼三大功能。

   現在的網卡基本分為有線網卡和無線網卡兩種,其中有線網卡則為標準通用化網卡設備,無線網卡主要是一個電信號接受和發送的設備,其標準主要使用數據傳輸速率來衡量。

   當然還有其他的設備,這里就不一一介紹了。

   說點題外話,個人認為計算機的主板、CPU和內存比較重要,畢竟內存和CPU寄存于主板之上,盲目的追求高內存和CPU并不一定能夠使其發揮到更好的工作效果,但也不排除高內存和CPU的確能夠是計算機高效工作。追求高配是現在的潮流,追求之前一定得讓主板所能承受才可。

2.3.軟件系統組成

   對于計算機的軟件系統,這里不想多說,做IT的你不知道軟件,那也甭做了,還是回家種地吧。話說計算機的軟件系統可以分為系統程序和應用程序兩大類。

   系統程序是為了簡化程序設計和使用方法而出現的一類高效的軟件程序,包括服務性程序、語言處理程序、操作系統、數據庫管理系統。應用程序是用戶利用計算機來解決問題而編制的程序。

   軟件(Software)是計算機系統中使用的各種程序,而軟件系統是指揮整個計算機硬件系統工作的程序集合。在計算機中的程序劃分為微程序設計級、機器語言級、操作系統級、匯編語言級和高級語言級五大級別。微程序設計級別是一種純硬件級別的程序設計,一般就是定義其硬件的指令系統,由機器硬件直接執行。機器語言級別也是硬件級別的程序設計,一般是借用微程序的指令系統實現程序設計,由微程序去執行的。操作系統級別屬于一種軟硬件混合級別的程序設計,一般涉及軟硬件指令的引用,主要在操作系統的控制下去調用軟硬件資源協調工作,實際底層是一般機器去執行的。匯編語言級別的程序一般使用匯編語言編寫,由匯編程序的支持和執行。高級語言級別的程序采用的是高級程序設計語言編寫,一般為一種純粹的軟件程序,由對應程序設計語言的編譯和執行程序支持和執行,這一級別的程序也稱為用戶程序。現在我們所做的程序大多都是建立在操作系統級別之上的匯編語言程序和高級語言程序。

   然而隨之技術的發展,現在的軟硬件的界限也模糊不清了,隨之只讀存儲器的出現,現下大多數的硬件設備都是集成式(也稱嵌入式)的,其內部都包含一個只讀存儲區,存儲著其對應的固有的軟件程序,這樣的部件我也稱之為固件。

   談到軟件,就不得不說程序設計語言,何為程序設計語言?程序設計語言就是使用約定的符號編寫計算機程序的語言,簡單的說是用來制作計算機軟件程序的語言,例如匯編、C、Java、PHP等等都是程序設計語言。現下的程序設計語言可分為機器語言、匯編語言和高級語言三大類。機器語言是一種用二進制形式表示并且能夠直接被計算機硬件識別和執行的語言,機器語言也機器本身結構有關,不同的機器其機器語言也不同,使用機器語言編寫的程序成為i額機器語言程序。匯編語言是一種將機器語言符號化的語言,它使用字母、符號和數字來代替數字編碼的機器指令,匯編語言的語句與機器指令一一對應,所以不同的機器也具有不同的匯編語言,用匯編語言編寫的程序稱為匯編語言程序;例如Nasm、Masm、Tasm等都屬于匯編語言程序。高級語言是一種與計算機結構不相關的,表達方式接近于被描述問題的程序設計語言,高級語言程序在計算機中需要利用其對應的編譯程序或解釋執行程序將其翻譯為對應的機器語言程序才可以執行;例如Basic、Fortran、Pascal、C語言、Delphi、C++、 Java等都屬于高級語言程序。然而高級語言又可以劃分為面向過程式語言、面向對象式語言等。

計算機存儲系統

1.存儲器的分類

   存儲器是計算機的基本部件之一,其按照不同的衡量標準可以劃分為不同的類別。最常見就是根據其本質讀寫能力劃分為只讀存儲器(ROM,Read-Only Memory)和隨機讀寫存儲器(RAM,Random Access Memory)。只讀存儲器中存儲的內容是不可變的,只能讀取數據而不能寫入數據,所以常用于保存一些硬件設備的基本信息,其存儲的數據是永久的,斷電后可以保留;隨機讀寫存儲器中存儲的內容是可變的,既可以寫入數據也可以讀取數據,其存儲的數據并不是永久的,斷電后則就會丟失。隨之ROM的發展可分為掩模式ROM(不可修改)、可編程ROM(PROM)、可擦除PROM(EPROM)、電可擦除PROM(EEPROM)和閃存(Flash Memory),現在所用ROM存儲器基本上都支持重新寫入。RAM可以非為SRAM(靜態RAM)和DRAM(動態RAM)兩種類型。

   存儲器根據在計算機系統中的作用和角色則分為寄存器(控制存儲器)、高速緩沖存儲器、內存(主存儲器)、磁盤存儲器(輔助存儲器)等。現今的通用計算機都具備寄存器、緩沖存儲器、內存和磁盤這四個存儲器設備,而且其訪問速度依次遞減,但是存儲容量則依次遞增。下面逐一介紹。

  • 寄存器

   寄存器,也稱為控制存儲器,用于臨時存儲參與運算數據,常集成于CPU(中央處理器)中,所以其存取數據速度快,其速度是所有存儲器中速度最快的。為什么要集成與CPU中?因為CPU包含運算器和控制器,其是處理數據的中心,如果有一個在讀取數據是從其他管理的元件中傳入,必定存在傳輸延遲問題,同時還增加了對其他元件的依賴程度和負載能力,所以將其寄存于CPU中作為臨時數據的存取空間。

  • 高速緩沖存儲器

   高速緩沖存儲器,從名字上可以得知其主要是起到緩沖數據的作用。由于寄存器容量有限,一個CPU運算的周期可能需要從較大的內存存儲器中獲取更多的數據信息,增大了數據傳輸的時間,這便限制了高速計算,為了解決這個問題,所以使用一個高速緩沖存儲器來加速CPU和內存之間的數據傳輸。高速緩存存儲器通常也集成于CPU中,用于臨時存儲即將參與運算的數據,其容量較小但是存取數據速度也很快。

  • 內存

   內存,也稱為主存儲器,用于存儲運行的程序和數據,其存取數據的速度較快,存儲數據的容量較大。內存是運行程序和資源數據與CPU進行交互的主要中間介質,也就是說程序啟動時先將程序數據送往內存中,然后由CPU去一條一條數據的執行。由于寄存器和高速緩沖存儲器都集成于CPU中,而內存是獨立于CPU的,所以內存的性能會直接影響計算機的性能。這也是大家都最求高內存的原因。

   內存的衡量標準主要有存儲容量、存取時間、存儲周期和存儲器帶寬四個指標。其中存儲容量是一個存儲器中可以容納的存儲單元總數,通常以字數或字節數作為單位;存取時間則是啟動到完成一次存儲器操作所經歷的時間,通常以納秒(ns)為單位;存儲周期則是連續啟動連詞操作所需間隔的最小時間,通常以納秒(ns)為單位;存儲器帶寬表示單位時間內存儲器所存儲的信息量大小,通常以位/秒或字節/秒為單位。后三者是其存取速度的主要衡量標準。

  • 磁盤存儲器

   磁盤存儲器,屬于輔助存儲器,簡稱輔存,輔存包括磁盤、U盤、光盤等外部存儲器,而磁盤存儲器是最為常見的輔存設備。輔存的最大特點是存儲容量大。

   隨著科技的發展,現在還存在另一種存儲器——虛擬存儲器。虛擬存儲器并發實際存在的物理存儲器,而是一種容量足夠大的邏輯模型,指借助磁盤等輔助存儲器來擴大主存容量的一種方式。其實可以將其理解為一種主存到外存層次上的緩沖存儲器。

2.存儲器的衡量單位
2.1.數據存儲單位

   眾所周知,計算機使用的是二進制數制系統。存儲元是計算機中最小存儲數據的介質,一個存儲元存儲一個二進制數碼(0或1);多個存儲單元組成一個存儲單元;多個存儲單元組成一個存儲器。

   說到存儲器,不得不說的是存儲器容量的問題。常見的“KB”或“K”、“MB”或“M”、“GB”或“G”、“TB”或“T”,這些都是存儲器容量的衡量單位。存儲器的容量其實是指存儲器所有存儲單元的總數,規定8位(8個二進制碼)為1字節,即8bit=1byte=1B(至于為什么這樣規定?筆者也沒搞清楚)。

   到底什么是位?位(bit)是計算機中最小的數據傳輸單位,其實就是一個二進制數碼(0或1),一個二進制序列中的每一個0或1都成為一個位,按照習慣,通常稱右邊為低位,左邊為高位。

   那什么又是字節?字節(byte)是計算機中最小的數據存儲單位,規定一個字節由8位組成,即一個字節就是8個0或1組成的二進制序列。隨著計算機的發展,其存儲容量越來越大,使用字節進行衡量就不太合理了。所以出現了千字節(KB)、兆字節(MB)、吉字節(GB)、太字節(TB)等等更大了衡量單位。

   從十進制的角度去考慮,上述的單位都相差千倍,在二進制中千倍可以使用210(1024)表示(因為其最接近1000)。所以標準情況下其計算機存儲單位換算過程如下:

1B=1byte=8bit=8b

1KB=1024B=1024byte

1MB=1024KB

1GB=1024MB

1TB=1024GB

……

   上述只是標準情況下的換算方式,而在現實中,大多數硬盤中還是使用10的3次方即1000作為轉換標準進行硬盤設計制造。

2.2.數據傳輸單位

   上面也提到,“位”是計算機中數據傳輸的最小單位。然而計算機在實際工作中,如果使用位進行數據傳輸則效率極其低,所以實際中CPU向存儲器送入或從存儲器取出信息時,通常使用用“字節”或“字”等較大的信息單元來工作。

   字節(byte或B)也就是上面講到的,一般由8位二進制數碼組成,也就是說使用字節進行傳輸數據則一次可以傳輸8位信息,然而這樣還是不能滿足當前的運算要求,因此就出現了字。

   字(word或W)是計算機中最常用的數據傳輸單位,字由若干個字節組成,是計算機一次處理或運算的一串二進制數碼,相同的字在不同的位置其含義也不同,例如送外控制器的字是指令,而送往運算器的字則是運算數。字的長度用位數來表示,通常把組成一個字的二進制位數叫做字長,我們常說的8位、16位、32位和64位CPU則就是指的CPU字長,也就是CPU一次能夠處理(傳輸)的二進制數碼位數。字長可以用于衡量一個CPU的能力,字長越大其性能則越高,字長可分為固定和可變兩種類型。常說的32位、64位操作系統則是對應于計算機處理器而言的,它們都是低向兼容,但是如果不匹配則其運行性能會大打折扣,比如說64位的CPU可以兼容32位的系統,但是其效果不能達到最佳,而32位則不能兼容64位的系統。

中央處理器和指令系統

1.指令系統

   上面一再提到指令,到底何為指令?指令就是一種指揮相應動作的命令,在計算機中指令是一種控制信號,用來控制計算機各個元件的相應操作。計算機的電子元件的工作都受到指令的支配。其是計算機中最小的執行單元,所有的程序都是由一系列相應的指令組成的,計算機的指令可劃分為微指令、機器指令和宏指令三類,微指令是微程序的命令,屬于硬件級別;宏指令則是有若干條機器指令組成的軟件指令,屬于軟件級別;機器指令其介于微指令和宏指令之間,每一條指令可以完成一個獨立的算術運算或邏輯運算,我們常說的指令就是指機器指令。

   計算機中所有機器指令的集合組成一個指令系統,其是計算機性能的重要衡量標準,不僅直接影響機器的硬件結構,也直接影響到其軟件系統,影響其機器本身的適用范圍。計算機的指令系統一般包括數據傳送指令、算術運算指令、邏輯運算指令、程序控制指令、輸入輸出指令、字符串處理指令、特權指令以及狀態寄存器置位、復位指令、測試指令、暫停指令,空操作指令等其他指令。從指令系統來講可以將計算機非為復雜指令系統計算機(CISC)和精簡指令系統計算機(RISC)兩種,復雜指令系統的指令多達幾百條,大多數情況下只有20%的指令會經常使用,而精簡指令系統就是這20%的指令組成的。

1.1.指令和尋址

   指令,也稱機器指令或指令字,是計算機中一種控制元件執行動作的命令,其實質是一種二進制序列代碼,由操作碼字段和地址碼字段組成。其中操作碼字段表示指令的操作特性和功能,地址碼字段指定參與操作的操作數據的地址。

   指令系統中的每一條指令都有一個操作碼,表示該指令應該進行什么性質的操作,也就是說每一種指令對應一種固定編碼的操作碼。操作碼的字段位數一般受到計算機指令系統的約束,一般8條指令的指令系統,3位操作碼則足夠;32條指令的指令系統,則需要5位操作碼。

   每一條指令不僅包括操作碼,而且還操作地址碼,地址碼用于指定操作數的存儲位置。根據操作數的個數可以將指令分為若干個操作數指令或若干個地址指令;一般的指令都存儲被操作數、操作數和操作結果三種數據,所以稱為三地址指令,當然也存在二地址指令、一地址指令和零地址指令。

   在計算機的指令系統中,一般指令的操作碼字段和地址碼字段的位數(長度)是固定的,而指令的位數(指令字長度)則分為固定和可變兩種。固定字長指令系統中,各種指令字長度都是相等的;可變字長指令系統中,各種指令字長度隨指功能而異。指令字長和機器字長大多會混為一談,指令字長度表示一條指令中所包含的二進制數碼位數;機器字長表示計算機一次直接處理二進制數碼的位數,其決定了計算機的運算精度。

   上面提到操作數地址,那么何為地址?來看下面的介紹。

   操作數地址是指操作數存儲在存儲器存儲單元時存儲單元的編號(編碼,一種二進制數碼);指令在存儲器中的地址則指指令存儲在存儲單元是該存儲單元的編號。在存儲器中,操作數或指令字寫入或讀取的方式有地址指定方式、相聯存儲方式和堆棧存儲方式三種形式。大多數的機器采用地址指定方式來表述操作數或指令的地址,這種方式稱為“尋址方式”,常說的尋址是指在內存中進行尋址。尋找方式分為指令尋址方式和數據尋址方式兩種。

   指令尋址方式包括順序尋址和跳躍尋址兩種形式,順序尋址就是按程序指令順序一條一條指令的執行,首先執行第一條,然后第二條,接著第三條……,通常情況下處理器中存儲一個程序技計數器(指令指針寄存器),用來標識下一條指令的序號(模擬序號),根據這個序號可以指定執行下一條指令的位置;當程序指令轉移執行時則需要使用跳躍尋址方式,此時當前指令會給出下一條指令的序號(并不是由程序計算器給出,但是其指會改變),程序跳躍后,然后在按新的指令地址順序執行。

   指令中操作數的地址碼一般有形式地址和尋址方式特制位組合形成,也就是說,指令中的地址碼并不是操作數的真實有效地址,因此,操作數的尋址過程就是將操作數的形式地址轉換為操作數的有效地址的過程。操作數的有效地址是將操作數的形式地址使用指定的尋址方式進行轉換得來的,其中操作數的形式地址是一種二進制數碼,尋址方式包括隱含尋址、立即尋址、直接尋址、間接尋址、寄存器尋址、相對尋址、基址尋址、變址尋址、塊尋址和段尋址等多種方式。隱含尋址就是指令中不明顯的給出而是隱含這操作數的地址;立即尋址表示指令中的地址字段指定的是操作數本身,而不是其地址;直接尋址就是在指令的地址字段中直接之處操作數在內存中的地址;間接尋址就是指令中的地址字段給出的是形式地址,而是操作數地址的指示器,然后由指示器指定其真是地址;寄存器尋找是指操作數存儲在CPU寄存器中,指令給出的是數據存儲的寄存器編號,還衍生有寄存器間接尋址方式,其指令給出的是輸出存儲在內存中的地址;相對尋址是相對當前指令地址而言的,通過偏移量來尋找操作數地址;基址尋址是將CPU中基址寄存器的內容加上指令格式中的形式地址而形成的操作數的有效地址的方式;變址尋找是把CPU中某個變址寄存器的內容與偏移量相加來形成操作數有效地址的方式;塊尋址通常指定數據庫的起始地址和數據庫的長度,然后尋找一個整體,常用于輸入輸出指令中;段尋址是將存儲器按指定大小劃分為多個段,然后采用基址尋址方式進行尋址,常用在微型機中。(這里只是簡單介紹一下,具體的過于復雜,所以不具體說明,可以自行查找資料理解)

   通常CPU中還存在一種能夠存儲和讀取數據的暫時存儲單元——堆棧(或許你看到它并不陌生,是兩種數據結構)。堆棧是一種能存儲和取出數據的暫時存儲單元,分為串聯堆棧和存儲器堆棧兩種形式。很多計算機把存儲器的一部分用作堆棧,堆棧與其他形式存儲器的差別在于其對數據的存取方法和尋址方法,其堆棧的主要存儲特點是數據先進后出。

1.2.指令與編程語言的關系

   從宏觀角度來將可以將當下的程序設計語言劃分為低級語言和高級語言兩種,低級語言大多直接與硬件指令打交道,而高級語言則與硬件本身關聯并不緊密。

   低級語言可分為機器語言(二進制語言)和匯編語言(符號語言),這兩種語言是面向機器的語言,和具體機器的指令系統密切相關,機器語言使用指令代碼編寫程序,而匯編語言使用指令助記符號來編寫程序。由于低級語言效率地下,而且多被機器限定,所以就誕生了高級語言。

   相對低級語言而言,高級程序設計語言擺脫了對硬件設備機器指令的束縛,其自成體系,常見的有C、C++、Java等。但是由于計算機只能識別并執行二進制的機器指令,所以高級語言編寫的程序大多需要借助匯編程序或對應的編譯程序將其本身翻譯成二進制的機器指令。所以高級語言入門快、適用度高,但是其效率相對而低。

2.中央處理器——CPU
2.1.CPU的構成介紹

   程序是一個指令序列,這個序列明確告訴計算機應該執行什么操作、應該在什么地方找到用來操作的數據,一旦把程序裝載入內存中,就可以有計算機自動完成取出指令和執行指令的任務,而用來完成這項工作的計算機部件稱為中央處理器,簡稱為CPU。

   CPU是計算機中最重要的部件之一,其必須有指令控制、操作控制、時間控制和數據加工處理四個級別功能。指令控制就是程序的順序控制;操作控制就是指一條指令的功能往往是由若干個操作信號組合來實現的;時間控制是對各種操作實施時間上的定時;數據加工就是對數據進行算術運算或邏輯運算。

   CPU主要有運算器、cache區和控制器三大部分組成。其中控制器由程序計數器、指令寄存器、指令譯碼器、時序產生器和操作控制器組成;是計算機的命令指揮中心,可以從內存中取出一條指令并指出下一條指令的內存地址,可以對指令進行譯碼和測試并產生相應的操作控制信號支配元件完成動作,同時指揮和控制CPU、內存和輸入/輸出設備之間數據流向。運算器由算術邏輯單元(ALU)、累加寄存器、數據緩沖寄存器和狀態條件寄存器組成;是計算機正真執行數據加工處理的部件,受控制器支配,可以執行所有的算術運算和邏輯運算,并進行邏輯測試等。下面是CPU結構模擬圖:

程序員應該了解的計算機知識(一)——基礎理論

從圖上可以看出CPU中有數據緩沖寄存器(DR)、指令寄存器(IR)、程序計數器(PC)、地址寄存器(AR)、累加寄存器(AC)和狀態條件寄存器(PSW)六類主要寄存器(寄存器就是臨時存取器,是一種臨時存儲數據的空間)。

  • 數據緩沖寄存器(DR)

   數據緩沖寄存器用來暫時存放從內存儲器讀取的一條指令或一個數據字或向內存存入一條指令或一個數據字。其作為CPU和內存、外部設備之間信息傳送的中轉站,可以補償CPU和內存、外圍設備之間在操作數度上的差別。有時也作為操作數寄存器使用。

  • 指令寄存器(IR)

   指令寄存器用于保存當前正在執行的一條指令數據。當執行一條指令時,首先把其從內存讀取到緩沖寄存器中,然后在送往指令寄存器,由指令譯碼器對指令的操作碼字段進行譯碼和測試后,向操作控制器發出具體操作的特定信號。

  • 程序計數器(PC)

   程序計算器也稱為指令計算器,其主要用于記錄下一條指令的內存地址。在程序開始執行前,必須將它的起始地址即第一條指令所在的內存單元地址送人程序計數器,當執行這條指令時,CPU會自動修改程序計數器的內容為下一條指令的地址。由于大多數指令都是順序執行的,所以修改過程通常只是簡單的加1。

  • 地址寄存器(AR)

   地址寄存器用來保存當前CPU所訪問的內存單元的地址。由于內存和CPU之間存儲操作數度上的差別,所以必須使用地址寄存器來暫時保存地址信息,直到內存的讀/寫操作完成為止。當CPU和內存進行信息交換,即CPU向內存存/取數據或CPU從內存中讀取指令時,都要使用到地址寄存器和數據緩沖寄存器。

  • 累加寄存器(AC)

   累加寄存器簡稱累加器,其是一個通用的寄存器。主要用于當運算器的算術邏輯單元執行算術或邏輯運算時,為算術邏輯單元提供一個工作區;其可以暫時存放算術邏輯單元的運算結構信息。

  • 狀態條件寄存器(PSW)

   狀態條件寄存器用于保存由算術指令和邏輯指令運行或測試的結果對應的各種條件碼內容,例如運算結果進位標志(C)、運算結果溢出標志(V)、運算結果為零標志(Z)、運算結果為負標志(N)等等。通常這些標志分別由移位觸發器保存。同時狀態條件寄存器還保存中斷和系統工作狀態等信息,以便使CPU和系統能及時了解機器運行狀態和程序運行狀態。狀態條件寄存器是一個由各種狀態條件標志拼湊而成的寄存器。

   信息從什么地方開始,中間經過哪個寄存器或多路開關,最后傳送到哪個寄存器,都要加以控制。在各寄存器之間建立數據通路的任務,是由稱為操作控制器的部件來完成的。操作控制器的功能,就是根據指令操作碼和時序信號,產生各種操作控制信號,以便正確地建立數據通路,從而完成取指令和執行指令的控制。

2.2.CPU的工作過程

   計算機所以能夠自動工作,是因為CPU能從存放程序的內存中取出一條指令并執行這條指令;緊接著又是取指令,執行指令……如此構成一個封閉的循環,當遇到“停止”指令時停止工作并退出。

   CPU的工作過程其實是程序的執行過程,如今的計算機都是基于“程序存儲”的概念設計制造的,程序存儲就是將程序通過輸入設備傳送到存儲器保存起來的過程。而計算機只能識別二進制數碼,CPU只能識別機器指令,所以我們通常編寫的程序或安裝的其他程序都是在特定環境或系統下編譯之后的程序,然而只有在其特定的執行環境下才能被解析為指令加載到內存中,所以說程序就是一個指令序列。

   當啟動一個程序的時候,會將這個程序對應的資源和本身指令序列輸入到內存中,然后CPU從中檢索出入口指令,并有CPU解碼為指定的CPU控制信號并支配其他硬件設備完成,執行過程也就是數據運算的過程,邏輯運算控制其執行其他指令的順序,算術運算計算執行指令的結果,然后將運算的結果寫回到內存中以備繼續使用,依次循序工作,直到所有指令執行完畢。上面的過程可以使用以下示意圖來表示:

程序員應該了解的計算機知識(一)——基礎理論

上面的示意圖,用于描述計算機CPU執行程序指令的基本過程。

   計算機執行程序的指令(指令由操作碼和地址碼組成,操作碼表示運算性質,地址碼表示操作數在存儲器中的位置)序列是逐條執行的,每執行一條指令基本上可分為四個步驟:一、取出指令,從存儲器(主要指內存)某個地址中取出要執行的的指令送到CPU內部的指令寄存器暫存;二、分析指令,把保存在指令寄存器中的指令送到指令譯碼器,譯出該指令對應的微操作;三、執行指令,根據指令譯碼,向各個部件發送相應的控制信號,完成指令規定的各種操作;四、為執行系一條指令做好準備,取出下一條指令地址循環上面步驟。

2.3.CPU字長與操作系統

   CPU字長是衡量CPU性能的一個重要標準,CPU字長表示CPU一次能夠傳輸的二進制數碼位數,現今出現最多的有8位、16位、32位和64位的CPU,其位數越高則其運算精度越高、運算速度越快。8位CPU和16位CPU常用于微處理設備,例如手持設備等;32位和64位CPU常用于PC等。

   或許會發現一個規律,CPU的字長都是8的倍數,可以用2的N次方表示,為什么?我們知道計算機中規定8位為一字節,由于CPU出現了寄存器和緩沖區,所以通常情況下以字節或更大的字作為信息處理的單位進行傳輸。而一個字由多個字節組成,所以CPU的字長通常為8的倍數。

   數據或指令在內存中通常使用內存地址來描述,地址就是一種編號,即其是有0和1兩位數碼組合而成的編號。對于一個N位的CPU來講,其每一條指令可以包含N位二進制數碼,即N個0和1進行組合而成的數碼,那么從排列組合的方式上看,其最多可以有2N個組合結果,也即是說一個n位的cpu最多可以在內存中讀取2n個內存地址。這種cpu對內存尋址的能力稱為尋址空間,即對應cpu來講內存的實際使用問題。

   對于一個32位的CPU來講,其最大的內存尋址空間為232=4294967296個,為了更準確的描述其空間大小,使用byte(字節)來表示其存儲空間大小。也就是說32位CPU的尋址空間為4294967296byte=4G,64位的CPU尋址空間可高達17TB,這個內存空間稱為物理內存,然后對實質的操作系統而言,比如Windows XP系統支持的實際尋址空間為2.5G~3.5G之間。

   上面也提到了操作系統,或許你也會發現,Windows Vista之后發布的操作系統都提供了32位和64位兩個版本,其主要是針對32位和64位CPU而定制的。32位的CPU一次能夠提取4個字節的數據,64位的CPU一次能夠提取8個字節的數據。32位的操作系統或程序可以在32位的CPU中運行,也可以在64位的CPU中運行,但是效率不能達到最高;而64位的操作系統或程序只能在64位的CPU中運行,其設計可以向下兼容。

計算機工作原理

1.用計算機的工作過程

   通過上面的介紹,對計算機的基本工作原理應該有一定的印象。計算機主要包括運算器(CPU)、存儲器(內存)、控制器(CPU)、輸入設備、輸出設備五個部分,因此計算機的工作離不開主板、CPU、內存三個硬件環境,同時為了能夠見證計算機的工作效果也必須存在輸入/輸入設備。下面就這五個基本部分來看一下計算機的基本工作原理,如圖:

程序員應該了解的計算機知識(一)——基礎理論

圖中“紅線”表示數據流向,“黑線”表示控制流向。CPU控制器控制輸入設備、輸出設備以及內存使用,程序被輸入設備以指令序列的方式輸入到內存中,CPU控制器從內存中讀取一條條指令,并根據指令的譯碼發出一條條控制信號給運算器和存儲器來完成規定的操作功能,然后CPU控制器控制其以適當的方式通過輸出設備輸出最終操作結果。我們可以通過下面一個模擬圖更清楚的理解這個過程,如圖:

程序員應該了解的計算機知識(一)——基礎理論

至于CPU內部的工作過程可以參考《2.2 CPU的工作過程》。

   提示一個小常識:計算機的主板上存在一個微弱電源維持BIOS芯片內BIOS系統(包括系統時間、引導系統、內存數據等)的正常運作。當主板接通外部電源的時候,BIOS系統會檢查所有硬件環境是否存在或正確安裝,如果通過則正常啟動引導系統,否則會作出相應的警告提示。只有所有的硬件設備完善才能是計算機正常工作。

2.通用計算機中存儲器工作過程

   現下的計算機存儲系統包括磁盤、內存、緩存區和寄存器等四大類型,當然其緩存又可分為多個級別,例如一級緩存、二級緩存等。下面來看一下其如何協調工作的。

   程序存儲在磁盤中,當打開程序化,有操作系統平臺或對應的執行平臺將程序指令化,轉換為一系列指令序列并送往內存中,如果程序過大則會借助虛擬內存(虛擬存儲器)來暫時寄存部分指令,內存加載部分指令;然后將入口指令送往CPU的寄存器,由CPU運算器和控制器執行指令,如果需要讀取數據,則從內存或緩存中取出數據,如果需要一條指令,則從內存或緩存總取出指令,在送往CPU進行運算或執行;一條指令執行完成后將結果暫時寫入到寄存器或CPU緩存或內存中,接著執行程序的下一條指令,從內存或緩存中讀取下一條指令送往CPU中進行指令,依次循環,即可完成一個程序的執行,當遇到停止指令是則停止執行并退出程序。

總結

   這篇文章或許講的比較亂,甚至有些東西我自己都還沒有搞清楚,一些名詞都是自己理解并給出釋義,或許并沒有給出明確的解釋,希望讀者見諒,本文大部分內容來自互聯網資料的整理。雖然我們搞軟件的并不一定需要深入研究這些東西,但是了解一下總是有益無害,而且這些都是基礎理論知識,對軟件的學習多多少少都有一定的幫助。

   如果需要了解的更深入,則可以自行查閱資料,并整理分享給大家。

分享名稱:程序員應該了解的計算機知識(一)——基礎理論
URL分享:http://m.2m8n56k.cn/article40/jdceeo.html

成都網站建設公司_創新互聯,為您提供標簽優化網站改版網站設計網站導航手機網站建設虛擬主機

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發
主站蜘蛛池模板: 日本不卡免费高清一级视频 | 久久精品免费i 国产 | 日韩午夜视频在线观看 | 国产精选91热在线观看 | 波多野结衣在线观看高清免费资源 | 在线播放精品 | 在线视频观看免费视频18 | 成人18免费软件 | 美国一级毛片免费 | 久久精品免视国产 | 欧美videofree性欧美另类 | 国产边打电话边做对白刺激 | 九九视频在线观看视频 | 18成人免费观看网站入口 | 欧美亚洲中日韩中文字幕在线 | 日韩亚洲欧美一区二区三区 | 亚洲高清一区二区三区 | 欧美成人精品高清在线观看 | 久草在线观看福利 | 国产亚洲精品国产第一 | 另类视频区第一页 | 久久国产精品久久精品国产 | 欧美中文字幕一区二区三区 | 97国产在线视频公开免费 | 国产一区第一页 | 久久免费在线视频 | 久久精品亚洲 | 国产成人精品一区 | 免费在线看a | 69视频成人 | 美女黄色在线看 | 国产大陆精品另类xxxx | 国内精品久久影院 | 国产在视频线精品视频www666 | 日本欧美一级aaaaa毛片 | 欧美亚洲在线视频 | 香蕉久久夜色精品国产 | a级毛片在线看日本 | 毛毛片在线| 成人免费看黄网址 | 成人久久18网站 |