linux内核笔记(二)微机计算机组成结构
一个系统有四个基本组成部分:
- 输入部分:接收系统的数据(键盘等)
- 处理中心:处理(cpu)
- 能源部分:处理需要的硬件资源(内存等)
- 输出部分:显示给用户(显示器等)

计算机系统分为:
计算机系统分为软件系统和硬件系统 ,两者相互依存
硬件:计算机的可见部分,物质,可摸得着的。(人的器官)
软件:控制硬件操作和动作的指令流。(大脑思维)
微型计算机组成原理:
一个传统微型计算机硬件组成结构:
cpu通过
地址线:内存或I/O设备的地址(读写的具体位置)
数据线:cpu和内存或I/O设备之间提供数据传输的通道
控制线:读 和 写
内部总线:地址线和数据线都是32位 因此地址空间范围是2的32次方 从0到4GB
和其他部分进行数据通信.
中断控制器:intel8259A
DMA控制器:intel8237A
定时控制器:intel8253定时芯片
键盘控制器intel8042芯片与键盘中的扫描电路进行通信


I/O端口寻址和访问控制方式
I/O端口和寻址
cpu要访问I/O接口控制器或控制卡上的数据和状态信息,需要找到他们的地址。这种地址就称为I/O端口或简称端口
端口地址的设置方式:统一编址和独立编址
- 端口统一编址:I/O接口控制器将所有端口归入存储器寻址地址空间范围。(存储器映像地址,用访问内存的指令)
- 端口独立编址:I/O控制器和控制卡的寻址空间单独作为一个独立的地址空间对待。(专门的I/O指令来访问端口)


I/O接口数据传输控制方式:
- 程序循环查询方式:cpu通过程序中循环查询指定设备控制器的状态来判断是否可以与设备进行数据交换。缺点:特别耗费CPU宝贵时间
- 中断处理方式:需要有中断控制器的支持相当于cpu中断当前的程序去执行相应的I/O中断处理服务过程,完成后然后去执行以前的程序
- DMA传输方式:直接存储器访问用于I/O设备与系统内存之间进行批量数据传送,整个过程需要使用专门的DMA控制器来进行而无需CPU插手,这种操作效率很高
主存储器、BIOS和CMOS存储器
主存储器(内存)
以前的DOS操作系统流行年代,640K或1MB内存容量基本上能满足普通应用程序的运行都采用Intel32位CPU,即都是PC/AT计算机。因此CPU的物理内存寻址范围已经高达4GB.
当计算机上电初始化,物理内存被设置从地址0开始的连续区域。除了地址0xA0000到0xFFFFF(640K到1M共384K)和0xFFFE0000到0xFFFFFFFF(4G处的最后一64K)范围以外的所有内存都可以操作系统内存。这两个特定范围被用于I/O设备和BIOS程序。
假设我们的计算机中有16MB的物理内存,
那么在linux0.1x系统中,0--640K将被作用存放内核代码和数据。
640k--1M之间的384K仍然保留用作图中指明的用途。
0xA0000开始的128K用作显示内存缓冲区,,随后部分用于其他控制卡的ROMBIOS或其映射区域。
0xF0000到1M范围用于高端系统ROMBIOS的映射区。
1M--16M将被内核用于作为可分配的主内存区
另外高速缓存区和内存虚拟盘也会占用内核代码和数据后面的一部分内存区域,该区域通常会跨越640K--1M的区域。

基本输入/输出程序BIOS
存放在ROM中的系统BIOS程序主要用于计算机开机时执行系统的各部分的自检,建立起操作系统需要使用的各种配置表,例如中断向量表,硬盘参数表,提供硬件设备接口服务。由于BIOS的这些服务不具备可重入性(即程序不可并发运行)。
开机时:cpu将段寄存器CS设置为0xF000,其段地址则被设置为0xFFFF0000,段长设置为64K IP被设置为0xFFF0,因此cpu代码指针指向0XFFFFFFF0处,即4G空间最后一个64J的最后16字节处(ROMBIOS存放的位置)
BIOS里会存放一条jmp指令跳转到BIOS代码中64KB范围内的某一条指令执行
最后:BIOS就会从硬盘或其他块设备把操作系统引导程序加载到0x7c00处,并跳转到这个地方继续执行引导程序。

CMOS存储器
CMOS(Complementary Metal Oxide Semiconductor,互补金属氧化物半导体)存储器来存放计算机的实时时钟信息和系统硬件配置信息。
CMOS的内存地址空间在基本内存地址空间之外,需要使用I/O指令来访问
中断控制器
两个级联的8259A可编程中断控制芯片组成一个中断控制器,用于实现I/O设备的中断控制数据存取方式,并且为15个设备提供独立的中断控制功能,


DMA控制器
DMA控制器的主要功能是通过让外部设备直接与内存传输数据来增强系统的性能,它由机器上的Intel 8237芯片或其兼容芯片实现。通过对DMA控制器进行编程,外设与内存之间的数据传输能在不受CPU控制的条件下进行。因此在数据传输期间,CPU可以做其他事情。
定时/计数器
用于处理计算机中的精确时间延迟。该芯片提供了3个独立的16位计数器通道。每个通道可工作在不同的工作方式下,并且这些工作方式均可以使用软件来设置。
键盘控制器
当按一个键被按下时,键盘发送的扫描码称为接通码
当松开一个键时,被称为断开码

串行控制卡
- 通信协议:计算机设备与计算机设备之间的语言(有效数据长度的格式:帧)
- 帧信息包括:起始同步信息和传输的实际数据和校验信息
- 串行通信:指在线路上以比特位数据流一次一个比特进行传输的通信方式。包括异步(以字符为单位)和同步串行(多个字符或字节组成的序列作为一个帧数据进行传输)两种类型。他们之间的主要区别在于传输时同步的通信单位或帧的长度不同。

- 异步串行传输格式

显示控制
硬盘控制(外存储设备,用磁性介质来保存信息)




linux内核笔记(二)微机计算机组成结构的更多相关文章
- 《Linux内核分析》 之 计算机是如何工作的
[李行之原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] <Linux内 ...
- Linux内核笔记--内存管理之用户态进程内存分配
内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...
- 【转载】linux内核笔记之进程地址空间
原文:linux内核笔记之进程地址空间 进程的地址空间由允许进程使用的全部线性地址组成,在32位系统中为0~3GB,每个进程看到的线性地址集合是不同的. 内核通过线性区的资源(数据结构)来表示线性地址 ...
- 【转载】linux内核笔记之高端内存映射
原文:linux内核笔记之高端内存映射 在32位的系统上,内核使用第3GB~第4GB的线性地址空间,共1GB大小.内核将其中的前896MB与物理内存的0~896MB进行直接映射,即线性映射,将剩余的1 ...
- Linux学习笔记(二) 文件管理
了解 Linux 系统基本的文件管理命令可以帮助我们更好的使用 Linux 系统,以下介绍几个常用的文件管理命令 1.pwd pwd 是 Print Working Directory 的简写,用于显 ...
- (笔记)Linux内核学习(二)之进程
一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是线程而不是进程.对 ...
- Linux 读书笔记 二
一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 若不小心登出后,直接刷新页面即可 2. 环境使用 完成实验后可以点击桌面上方的“实验截图”保存并分 ...
- Linux内核笔记:epoll实现原理(一)
一.说明 针对的内核版本为4.4.10. 本文只是我自己看源码的简单笔记,如果想了解epoll的实现,强烈推荐下面的文章: The Implementation of epoll(1) The Imp ...
- linux内核系列(二)内核数据结构之链表
双向链表 传统链表与linu内核链表的区别图: 图一 图二 从上图中看出在传统链表中各种不同链表间没有通用性,因为各个数据域不同,而在linux内核中巧妙将链表结构内嵌到数据域结构中使得不同结构之间能 ...
- linux内核第一二章总结
1 Linux内核简介 1 Unix的历史 1.Unix演化版实现了任务管理.换页机制.TCP/IP等新的特性. 2.Unix的特点: Unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目 ...
随机推荐
- MySQL InnoDB Architecture 简要介绍
MySQL InnoDB 存储引擎整体架构图: 一.内存存储结构 1.Buffer Pool buffer pool 是主内存中的一块儿存储区域,用于存储访问的表及索引数据.这样从内存中直接访问获取使 ...
- List嵌套排序并取第一个对象
using Newtonsoft.Json;using 嵌套List排序; //示例listvar exampleString = "{\"code\":1,\" ...
- windows下MinGW编译ffmpeg
windows下MinGW编译ffmpeg 1.官网下载MinGW并安装 1)下载 ,下载网址: https://sourceforge.net/projects/mingw/files/ ...
- Python 函数传递任意数量的实参
函数传递任意数量的实参 *形参名,形参名中的星号让python创建了一个空元组,并将收到的所有值都封装到这个元组中 # 案例 *toppings 形参名中的星号让python创建了一个空元组,并将收到 ...
- Centos7.x 使用 selenium + python + jenkins 做UI自动化
一.基础环境准备 1.Chrome + Chrome Driver https://www.cnblogs.com/TSmagic/p/15671533.html(此篇文章已经介绍) 2.Seleni ...
- BS系统自动更新的实现
背景: 我公司做的考试系统(基于java开发的BS系统)是卖给学校的,随着客户数量增多,日常版本升级.远程维护工作占了程序员很多时间,遂考虑实现系统自动化更新. 要解决的问题及解决方案: 1.什么时候 ...
- 2022-09-22:以下go语言代码输出什么?A:5、B:不能编译;C:运行时死锁。 package main import ( “fmt“ “time“ ) func main
2022-09-22:以下go语言代码输出什么?A:5.B:不能编译:C:运行时死锁. package main import ( "fmt" "time" ) ...
- 2021-09-27:Pow(x, n)。实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x**n)。力扣50。
2021-09-27:Pow(x, n).实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x**n).力扣50. 福大大 答案2021-09-27: 遍历n的二进制位. 时间复杂度:O( ...
- Node 调试利器,前端、Node 开发必备 - VSCode JS Debug Terminal
经常看到有同学抱怨 Node 调试麻烦或者是搞不清怎么调试各种脚本.Jest.Webpack 等等,而偶尔看到的调试相关的文章又全都是在写 inspect.launch.json 这些方案,其实有一定 ...
- vue入门第一坑:Eslint
Eslint是语法检查插件,它会严格要求你的代码,就你本身代码没错,但是一运行,Eslint就跳出来报错了.它会自动检查你的代码是否符合规范.所以,建议新手入门Vue创建项目的时候可以关掉Eslint ...