CSAPP笔记——第一章计算机系统漫游

hello,你好鸭,我是Ethan,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!💪💪💪
目前博客主要更新Java系列、项目案例、计算机必学四件套等。✔️✔️✔️
人生之败,非傲即惰,二者必居其一,勤则百弊皆除。加油呀!🏃🏃🏃


🔥个人主页:Ethan Yankang
🔥专栏:CSAPP||计算机基础
🔥本篇概览:以hello world为例,讲解了程序从编写到运行的全过程,以及现代计算机的基本架构。理解了这些知识,就掌握了现代计算机的宏观之态。

文章目录

    • 1.1The Lifetime of flello Program
      • 1.1.1gcc -o hello hello.c
      • 1.1.2.编译过程具体分析
    • 1.2 the reason of learning compilation system
      • 1.2.1 Optimizing program performance
      • 1.2.1 Understanding link-time errors
      • 1.2.1 Avoiding security holes
    • 1.3 Run Hello Program by Shell
      • 1.3.1 Hardware Organization of a Computer System
      • 1.3.2 Process Of Run Hello Program by Shell
        • STEP1 键盘中的 hello字符串被加载进寄存器中
        • STEP2 复制磁盘上的hello可执行文件的数据与代码到内存
        • STEP3 CPU将hello,world\n 从内存复制到寄存器文件,再从寄存器文件复制到显示设备,显示
      • 1.3.3 Memory Hierarchy
    • 1.4 The Operating System Manages Hardware
      • 1.4.1 Operating System
      • 1.4.2 Process
      • 1.4.1 Virtual memory
      • 1.4.1 File
    • 1.5 Use ssh run hello program
      • 1.5.1 如何获得更高的计算力?
        • 1.5.1.1 Multi-core Processor Organization
        • 1.5.1.2 Hyper Threading
        • 1.5.1.3 Instruction-Level Parallelism
        • 1.5.1.4 Single Instruction Multiple Data
      • 1.5.2 Abstractions in Computer Systems

1.1The Lifetime of flello Program

源代码:
在这里插入图片描述
生命周期:
在这里插入图片描述
具体执行分析:

1.1.1gcc -o hello hello.c

通过一条命令 gcc -o hello hello.c , 即可通过编译系统完成编译称为可执行文件hello
在这里插入图片描述

1.1.2.编译过程具体分析

在这里插入图片描述

预处理:将源代码文件中以#开头的文件引入,源代码增加相关了内容(如#<stdio.h>)
编译:将源代码编译成汇编语言,中间过程包括词法分析、语法分析、语义分析、中间代码生成等等。
汇编:将汇编语言转化为机器指令,打包成二进制** 可重定位目标文件 ** hello.o
链接:链接器将hello.o可重定位目标文件与目标文件printf.o按照一定规则合并,最终形成可执行文件hello。该文件就可以加入内存中进行执行。

1.2 the reason of learning compilation system

1.2.1 Optimizing program performance

1.为什么Switch要比一连串if-else语句效率更高?
2.一个函数开销多大?
3.while循环比for循环更高效吗?

1.2.1 Understanding link-time errors

构建大型程序的时候,往往是在链接阶段出问题,各种函数库之间的调用是最容易出问题的。以往经验中各种奇奇怪怪错误往往是与链接器有关的。例如:

静态变量与全局变量的区别是?
静态库和静态库是什么?

1.2.1 Avoiding security holes

缓冲区溢出最易导致安全漏洞。如何编写代码避免安全漏洞?
第一步就是要理解数据和控制信息在程序栈上是如何存储的?了解不严谨不规范的书写方式会引起什么样的后果?

在第三章中,我们会讲述堆栈的原理和缓冲区溢出错误,以及如何利用操作系统与编译器来降低攻击风险。

1.3 Run Hello Program by Shell

在这里插入图片描述

1.3.1 Hardware Organization of a Computer System

在这里插入图片描述
注意这里的适配器与控制器只是封装方式不同而已,功能一样。
Main Memory就是RAM芯片,就是内存

1.3.2 Process Of Run Hello Program by Shell

STEP1 键盘中的 hello字符串被加载进寄存器中

./后面的hello不是系统程序,所以处理器会把hello这个字符串放入内存中,
在这里插入图片描述

STEP2 复制磁盘上的hello可执行文件的数据与代码到内存

数据就是 hello,world\n 。此过程利用技术DMA(直接内存访问),数据不经过CPU,直接从磁盘到内存
在这里插入图片描述

STEP3 CPU将hello,world\n 从内存复制到寄存器文件,再从寄存器文件复制到显示设备,显示

在这里插入图片描述

1.3.3 Memory Hierarchy

即使执行如此简单的打印程序,数据信息仍然在磁盘、内存、处理器以及IO设备之间搬运,需要花费大量时间。

Commonly
Larger storage devices than Smaller storage devices
Faster storage devices more EXPENSIVE than Slower storage devices

在这里插入图片描述

so ,there comes the Cache matter:
在这里插入图片描述

这个计算机的信息存储可用以下表示:
存储器山
在这里插入图片描述

1.4 The Operating System Manages Hardware

1.4.1 Operating System

上面的程序无论shell还是hello均未访问硬件如键盘、显示器、磁盘等等,全都是操作系统作为中介而代之
在这里插入图片描述
操作系统引入的抽象:
在这里插入图片描述

1.4.2 Process

在这里插入图片描述
这里的上下文切换中的上下文是指——
操作系统会保留程序运行中的各种状态参数,比如当前寄存器文件中的值、PC值(指令地址寄存器中的值)、内存中的值等等

现代操作系统一个进程其实是由多个线程组成。线程运行在进程的上下文之中。共享数据与代码
在这里插入图片描述

1.4.1 Virtual memory

每一个进程的地址空间就是虚拟地址,其典型分布如下:
在这里插入图片描述

1.4.1 File

这是Unix/linux类系统的哲学抽象,其实绝大多数系统均为此。
在这里插入图片描述

1.5 Use ssh run hello program

远程网络运行程序
在这里插入图片描述

1.5.1 如何获得更高的计算力?

Thread-LevelConcurrency(线程级并发)
Instruction-Level Parallelism(指令级并行)
Single-Instruction Multiple-Data Parallelism(单指令,多数据并行)

1.5.1.1 Multi-core Processor Organization

在这里插入图片描述

1.5.1.2 Hyper Threading

在这里插入图片描述

1.5.1.3 Instruction-Level Parallelism

在这里插入图片描述

1.5.1.4 Single Instruction Multiple Data

单指令多数据
在这里插入图片描述

1.5.2 Abstractions in Computer Systems

在这里插入图片描述


📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤ 分享👥 留言💬thanks!!!
📚愿大家都能学有所得,功不唐捐!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3031007.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV中的模块:点云配准

点云配准是点云相关的经典应用之一。配准的目的是估计两个点云之间位姿关系从而完成两者对应点之间的对齐/对应,因而在英文中又叫“align”、“correspondence”。笔者曾经是基于OpenCV进行三维重建的,并且从事过基于深度学习的6DoF位置估计等工作。在这些工作中,除了重建点…

深度学习课程论文精读——ESRGAN

目录 1.研究概述 2.论文创新 2.1 改进生成器的网络框架 2.2 改进判别器 2.3 改进感知损失 2.4 网络插值 3.实验 3.1 评价指标 3.2 训练细节 3.3 对比实验 3.4 消融实验 3.5 网络插值 4.总结 5.阅读参考 文章标题&#xff1a;《ESRGAN: Enhanced Super-Resolution…

SDXL-ControlNet模型MistoLine:引领高精度图像生成的革新高质量图像模型

在数字艺术的浩瀚星空中&#xff0c;MistoLine犹如一颗璀璨的新星&#xff0c;以其对SDXL-ControlNet技术的深度整合&#xff0c;展示了对多种线稿类型的非凡适应能力&#xff0c;并在高精度图像生成领域树立了新的标杆。 GitHub&#xff1a;https://github.com/TheMistoAI/Mi…

Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点

文章目录 一、通信机制1、轮询1.1、短轮询1.2、长轮询 2、Websocket3、Server-Sent Events 二、区别1、连接方式2、协议3、兼容性4、安全性5、优缺点5.1、WebSocket 的优点&#xff1a;5.2、WebSocket 的缺点&#xff1a;5.3、SSE 的优点&#xff1a;5.4、SSE 的缺点&#xff1…

代码随想录day62 | 单调栈P2 | ● 503. ● 42.

终于来到了大名鼎鼎的接雨水, 舍友的23年暑期面试就是接雨水 XD 503.下一个更大元素II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是…

ArcGIS如何计算地级市间的距离

一、数据准备 加载配套实验数据包中的地级市和行政区划矢量数据(订阅专栏后,从私信查收数据),如下图所示: 二、计算距离 1. 计算邻近表 ArcGIS提供了计算点和另外点之间距离的工具:分析工具→邻域分析→生成临近表。 计算一个或多个要素类或图层中的要素间距离和其他邻…

C++ | Leetcode C++题解之第79题单词搜索

题目&#xff1a; 题解&#xff1a; class Solution { public:bool exist(vector<vector<char>>& board, string word) {rows board.size();cols board[0].size();for(int i 0; i < rows; i) {for(int j 0; j < cols; j) {if (dfs(board, word, i, …

flutter开发实战-log日志存储zip上传,发送钉钉机器人消息

flutter开发实战-log日志存储zip上传&#xff0c;发送钉钉机器人消息 当我们需要Apk上传的时候&#xff0c;我们需要将日志打包并上传到七牛&#xff0c;上传之后通过钉钉通知我们日志下载地址。 这里我使用的是loggy来处理日志 一、引入loggy日志格式插件 在工程的pubspec.…

指针系列三

文章目录 1.字符指针&#xff1a;2.数组指针&#xff1a;3.二维数组传参的本质4.函数指针变量typedef 关键字 5.函数指针数组6.转移表 1.字符指针&#xff1a; 字符指针&#xff0c;也称为字符串指针&#xff0c;是指向内存中的字符或字符串的指针。 在C语言中&#xff0c;字符…

bash: docker-compose: 未找到命令

bash: docker-compose: 未找到命令 在一台新的服务器上使用 docker-compose 命令时&#xff0c;报错说 docker-compose 命令找不到&#xff0c;在网上试了一些安装方法&#xff0c;良莠不齐&#xff0c;所以在这块整理一下&#xff0c;如何正确快速的安装 docker-compose cd…

Linux 进程间通信 System V系列: 共享内存,信号量,简单介绍消息队列

进程间通信 System V系列: 共享内存,初识信号量 一.共享内存1.引入2.原理3.系统调用接口1.shmget2.shmat和shmdt3.shmctl 4.边写代码边了解共享内存的特性1.ftok形成key,shmget创建与获取共享内存2.shm相关指令3.shmat和shmdt挂接和取消挂接4.shmctl获取共享内存信息,释放共享内…

判断字符是否唯一——力扣

面试题 01.01. 判定字符是否唯一 已解答 简单 相关标签 相关企业 提示 实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同。 示例 1&#xff1a; 输入: s "leetcode" 输出: false 示例 2&#xff1a; 输入: s "abc" 输出: true…

Vue项目npm install certificate has expired报错解决方法

1.Vue项目 npm install 安装依赖突然报错&#xff1a; npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/zrender/download/zrender-4.3.0.tgz failed, reason: certificate has expired npm ERR! A com…

Xilinx 千兆以太网TEMAC IP核简介

Xilinx 公司提供了千兆以太网MAC控制器的可参数化LogiCORET™IP解决方案&#xff0c;通过这个IPCore可以实现FPGA与外部网络物理层芯片的互连。基于Xilinx FPGA 的以太网设计&#xff0c;大大降低了工程的设计复杂度&#xff0c;缩短了开发周期&#xff0c;加快了产品的面市速度…

金南瓜EAP库使用开发

前言 最近做了 一个半导体公司的上位机开发。厂商要求要支持EAP通讯。 先了解一下EAP是什么吧&#xff1f;百度资料 EAP&#xff08; Equipment Automation Program&#xff09;设备自动化处理&#xff0c;工厂实现设备自动化生产和管理。 1. 机台状态数据收集&#xff0c;包…

网络编程——Socket——模拟用户登录

功能一&#xff1a;模拟用户登录 功能二&#xff1a;实现客户发送登录用户信息&#xff0c;服务器端显示登录信息并响应给客户端登录成功 这里设置的用户登录信息为&#xff1a;admin&#xff0c;123456 实现&#xff1a; 1.首先&#xff0c;服务端创建并启动服务器&#x…

JINGWHALE 虚拟现实物质与空间理论 —— 全息世界

JINGWHALE 对此论文相关未知以及已知概念、定理、公式、图片等内容的感悟、分析、创新、创造等拥有作品著作权。未经 JINGWHALE 授权&#xff0c;禁止转载与商业使用。 一、虚拟现实物质与空间理论 物质是由离散的奇点JING粒子&#xff0c;依据不同的维度粒度&#xff0c;通过…

SSM【Spring SpringMVC Mybatis】——Mybatis(二)

如果对一些基础理论感兴趣可以看这一期&#x1f447; SSM【Spring SpringMVC Mybatis】——Mybatis 目录 1、Mybatis中参数传递问题 1.1 单个普通参数 1.2 多个普通参数 1.3 命名参数 1.4 POJO参数 1.5 Map参数 1.6 Collection|List|Array等参数 2、Mybatis参数传递【#与…

【全开源】JAVA台球助教台球教练多端系统源码支持微信小程序+微信公众号+H5+APP

功能介绍 球厅端&#xff1a;球厅认证、教练人数、教练的位置记录、助教申请、我的项目、签到记录、我的钱包、数据统计 教练端&#xff1a;我的页面&#xff0c;数据统计、订单详情、保证金、实名认证、服务管理、紧急求助、签到功能 用户端&#xff1a;精准分类、我的助教…

第八章小程序后端开发,运用Bmob后端云

比目后端云简介 一个完整的小程序系统&#xff0c;不但需要前端的展现&#xff0c;而且需要后端服务器的支撑&#xff0c;以提供数据服务。也就是说&#xff0c;开发一个真正完整的小程序应用&#xff0c;需要前后端的相互配合。小程序与远程服务器之间通过HTTPS传输协议进行数…