zoukankan      html  css  js  c++  java
  • 计算机组成原理

    1. Python是一款编程语言,用于程序员与计算机的沟通,即程序员可以通过编程让计算机实现某些特定功能。

    用程序语言开发程序,最终开发出的是一个软件,目前我们使用的软件均是需要运行在操作系统之上的,我了解到之前也有过在没有操作系统的环境下实现编程,但是太过复杂,难以满足现在应用软件的需求。操作系统是运行于硬件之上,来控制硬件的。

    2.应用程序-》操作系统-》硬件 (计算机 = 硬件 + 操作系统 + 应用程序

    计算机硬件包含:运算器、控制器、存储器、输入设备、输出设备,例如常见的计算机系统一般是由一个或多个处理器、主存、磁盘、打印机、键盘、鼠标、显示器、网络接口以及机箱、音响等各种输入/输出设备组成。

    操作系统:主要负责管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合。单纯的说操作系统是是运行于内核态,是不准确的。

    软件(应用程序):指使用各种不同的编程语言(C、C++、JAVA、Ruby、Python等等)、通过各种开发工具并基于各种操作系统开发的——软件。例如Word、QQ。

    CPU、内存以及I/O设备都由一条系统总线(bus)连接起来并通过总线与其他设备通信

    3.cpu-》内存-》磁盘(三者读取数据速度的比较:cpu>内存>磁盘)

    cpu是人的大脑,负责运算(CPU是核心,计算机的大脑就是CPU,它从内存中取指令->解码->执行,然后再取指->解码->执行下一条指令,周而复始,直至整个程序被执行完成。每个cpu都有一套可执行的专门指令集,任何软件的执行最终都要转化成cpu的指令去执行。)

    内存是人的记忆,负责临时存储(内存:1. 负责硬盘等硬件上的数据与CPU之间数据交换处理;2. 缓存系统中的临时数据。3. 断电后数据丢失)

    硬盘是人的笔记本,负责永久存储(硬盘:存储资料和软件等数据的设备,有容量大,断电数据不丢失的特点。)

     4.cpu与寄存器,内核态与用户态及如何切换

    由于访问内存和CPU执行指令存在时间差,为了更高效,出现了寄存器,所有CPU内部都有一些用来保存关键变量和临时数据的寄存器。

    寄存器种类:通用寄存器、程序计数器、堆栈指针、程序状态字寄存器(PSW)

    程序状态字寄存器(PSW):这个寄存器包含了条码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各种其他控制位。用户通常读入整个PSW,但是只对其中少量的字段写入。在系统调用和I/O中,PSW非常非常非常非常非常非常重要

    内核态:获取CPU所有的指令集,包含计算,包含硬件方面的操作
    用户态:获取部分CPU的指令集,不包含硬件方面的操作,包含计算
    用户态和内核态指的是CPU的两种工作状态,两者可以互相转换。通常,PSW中有一个二进制位控制这两种模式

    内核态与用户态切换  

      当进程在执行用户自己的代码时,我们称其处于用户态。用户态下工作的软件不能操作硬件,但是我们的软件比如暴风影音,一定会有操作硬件的需求,比如从磁盘上读一个电影文件,那就必须经历从用户态切换到内核态的过程,为此,用户程序必须使用系统调用(system call),系统调用陷入内核并调用操作系统,当一个进程执行系统调用而陷入内核代码中执行时,我们就称进程处于内核态。

    5.存储器系列,L1缓存,L2缓存,内存(RAM),EEPROM和闪存,CMOS与BIOS电池

    L1缓存:在cpu芯片中加入更大的缓存,一级缓存L1,用和cpu相同的材质制成,cpu访问它没有时延

    L2缓存:当某个程序需要读一个存储字时,高速缓存硬件检查所需要的高速缓存行是否在高速缓存中。如果是,则称为高速缓存命中,缓存满足了请求,就不需要通过总线把访问请求送往主存(内存),这毕竟是慢的。高速缓存的命中通常需要两个时钟周期。高速缓存为了命中,就必须访问内存,这需要付出大量的时间代价。高速缓存价格昂贵,大小有限,有些机器具有两级甚至三级高速缓存,每一级高速缓存比前一级慢但是容易大。L1与L2的差别在于对cpu对L1的访问无时间延迟,而对L2的访问则有1-2个时钟周期(即1-2ns)的延迟。

    内存(RAM):(随机存取存储器)主存是易失性存储,断电后数据全部消失

    EEPROM:在电源切断之后,非易失性存储的内容并不会丢失。ROM只读存储器在工厂中就被编程完毕,然后再也不能修改,EEPROM与ROM区别就是可以擦除和重写

    闪存:非易失性。闪存在速度上介于RAM和磁盘之间,但与磁盘不同的是,闪存擦除的次数过多,就被磨损了。

    CMOS:易失性。许多计算机利用CMOS存储器来保持当前时间和日期。CMOS存储器和递增时间的电路由一小块电池驱动,所以,即使计算机没有加电,时间也仍然可以正确地更新,除此之外CMOS还可以保存配置的参数,比如,哪一个是启动磁盘等,之所以采用CMOS是因为它耗电非常少,一块工厂原装电池往往能使用若干年,但是当电池失效时,相关的配置和时间等都将丢失

    BIOS电池:主板电池,主要用于记录计算机系统的时间,也就是维持系统时钟的准确性。电量不够时,时间会回到出厂日期,还有记录启动时要用的硬件信息,也就是维持CMOS的BIOS信息。

    6.磁盘结构,平均寻道时间,平均延迟时间,虚拟内存与MMU

    磁盘结构:由磁头、磁道、扇区、柱面组成

    磁道:每个磁头可以读取一段换新区域,称为磁道

    扇区:每个磁道划成若干扇区,扇区是磁盘级别的最小读写单位:512Bytes,操作系统级别的最小读写单位是:1 block=8*512Bytes

    柱面:把一个戈丁手臂位置上所以的磁道合起来,组成一个柱面

    数据都存放于一段一段的扇区,即磁道这个圆圈的一小段圆圈,从磁盘读取一段数据需要经历寻道时间和延迟时间

    平均寻道时间:机械手臂从一个柱面随机移动到相邻的柱面的时间称为寻道时间,找到了磁道就意味着找到了数据所在的那个圆圈,但是还不知道数据在这个圆圈的具体位置

    平均延迟时间:机械臂到达正确的磁道之后还必须等待旋转到数据所在的扇区下,这段时间称为延迟时间

    虚拟内存:该机制使计算机可以运行大于物理内存的程序,方法是将正在使用的程序放入内存取执行,而暂时不需要执行的程序放到磁盘的某块地方,这块地方称为虚拟内存,在linux中称为swap

    MMU:这种机制的核心在于快速地映射内存地址,由cpu中的一个部件负责,称为存储器管理单元(MMU)

    7.磁带

    在价钱相同的情况下比硬盘拥有更高的存储容量,虽然速度低于磁盘,但是因其大容量,在地震水灾火灾时可移动性强等特性,常被用来做备份。(常见于大型数据库系统中)

    8.设备驱动与控制器

    控制器:控制器负责控制连接的设备,它从操作系统接收命令,比如读硬盘数据,然后就对硬盘设备发起读请求来读出内容。提供给操作系统一个简单而清晰的接口

    设备驱动器:要想调用设备,必须根据该接口编写复杂而具体的程序,必须把设备驱动程序安装到操作系统中。

    9.总线与南桥和北桥

    总线:数据总线:用于传送数据信息。/地址总线:是专门用来传送地址的。/控制总线:用来传送控制信号和时序信号。这里是按照功能分类,还可以按照层次和传输方式分类。

    北桥即PCI桥:连接高速设备 例如:CPU、主存储器

    南桥即ISA桥:连接慢速设备 例如:磁盘

    10.操作系统的启动流程

    在计算机的主板上有一个基本的输入输出程序(Basic  Input Output system)

    BIOS就相当于一个小的操作系统,它有底层的I/O软件,包括读键盘,写屏幕,进行磁盘I/O,该程序存放于一非易失性闪存RAM中。

    启动计算机过程:

    10.1.计算机加电

    10.2.BIOS开始运行,检测硬件:cpu、内存、硬盘等

    10.3.BIOS读取CMOS存储器中的参数,选择启动设备

    10.4.从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位)

    10.5.根据分区信息读入bootloader启动装载模块,启动操作系统

    10.6.然后操作系统询问BIOS,以获得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户按照设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始有关的表格(如进程表),穿件(?)需要的进程,并在每个终端上启动登录程序或GUI

    11.应用程序的启动流程

    当我们在电脑上打开QQ时(右键-打开 或者双击QQ图标),其实是通过鼠标(输入设备)向CPU发送了一条命令,CPU接收到这条命令后,QQ程序就从硬盘里被加载到内存(加载时不通过处理器,直接从硬盘加载程序到内存里),加载完成后,CPU就开始执行QQ程序。程序执行起来后,CPU可以让QQ程序显示在我们的在显示器上。也就是你看到了QQ 程序运行起来了。如果这个时候,你用QQ截取了一张屏幕的图片,那么这张图片会首先保存到内存,在没有退出截屏状态时,你可以在这张图片上写字、画线条,等你右键保存这张图片的时候,这张图片就会保存到硬盘里。

     

    其他:

    *对用户来说一个有两个线程的cpu就相当于两个cpu,进程是资源单位而线程才是cpu的执行单位。

    *“进程是拥有资源的最小单位,线程是CPU调度的最小单位。”

    由于进程拥有着计算机的资源,因而其内部线程可以方便的访问其内部的各种资源。

    一个cpu同一时刻只能处理一个进程(一个进程中至少一个线程)

     总结:

    只是可以理解,但是还没有转化为自己可以描述出来的知识。

  • 相关阅读:
    netcore 开发问题整理(图片地址)
    netcore 开发问题整理(下拉框)
    C# 请求网址中汉字的编码转换
    C# 时间戳
    c# 判断指定文件是否存在
    js数组常用方法整理
    服务器断电 Mysql启动失败
    Bean初始化之postProcessBeforeInitialization、afterPropertiesSet、init-method、postProcessAfterInitialization等方法的加载
    Java多线程基础
    Mysql多字段order by用法
  • 原文地址:https://www.cnblogs.com/strive-man/p/8678275.html
Copyright © 2011-2022 走看看