计算机系统 学习笔记(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.mzph.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…

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;大于等于其内部所有…

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】动态数组的创建和使用

在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; 首先&#…

信号量SIGCHLD的使用,如何让父进程得知子进程执行结束,如何让父进程区分多个子进程的结束

本教程基于 Ubuntu 20.10 gcc 10.2.0. 示例程序如果不能正常编译和执行&#xff0c;说明您系统和工具版本与我的不匹配&#xff0c;请自行查阅资料。 0 概述 先给出该信号的描述&#xff1a; SignalValueDescriptionSIGCHLD17Child status has changed (POSIX). Signal sent …

UNIX哲学

参考&#xff1a; 对比Linux与Windows 使用Linux想要做某些事情的时候&#xff0c;就拆开想&#xff0c;想想我需要哪些功能&#xff0c;需要哪些工具&#xff0c;依次怎么执行&#xff0c;然后用管道建立连接&#xff0c;让数据依次流过不同的工具&#xff0c;从而得到最终结果…

fork创建多个子进程

references: [1] how to create two processes from a single Parent [2] fork() in C [3] linux中fork同时创建多个子进程的方法 fork的本质&#xff0c;就是复制&#xff0c;把当前进程复制一份&#xff0c;然后两个进程并发地执行fork后面的语句&#xff0c;区别就是&#x…

wait系统调用

reference:Wait System Call in C 只强调几点&#xff0c;剩下的直接看参考链接内容就好了&#xff0c;不是偷懒&#xff0c;而是里面内容写的很好了&#xff0c;没必要再写一遍了&#xff0c;这种东西就是单纯的系统调用而已&#xff0c;理解了功能&#xff0c;就完事了&#…

正则表达式特别需要注意的点:“空“字符的匹配

在正则表达式中&#xff0c;[...]代表1个字符&#xff0c;不管里面有多少字符&#xff0c;最终这个东西的结果都是1个字符。 对于表达式[^a]表达的匹配除了a之外的字符&#xff0c;并且是1个字符。 需要注意的是&#xff0c;有些特殊字符是不会被匹配的。 我们看一个示例&am…