<<程序是怎么跑起来的>>学习笔记总结二

运行python程序的两种方式交互式和文件式_执行Python程序的两种方式 交互式(了解)交互式环境下,敲完一条命令按下enter键马上能看到结果,调试程序方便。程序无法永久保存,关掉cmd窗口数据就消失了。命令行式(了解)打开文本编辑器,在文本编辑器中写入一串字符。文本编辑器写的代码毫无意义,只是一堆字符,并且文件的后缀名没有影响。由于python语言是解释型语言,我们直接使用python打开文件,python会读一行翻译一行,并且这个文件是永久保存在硬盘中的。但是需要... 阅读详情

<<程序是怎么跑起来的>>学习笔记总结二

2.7 程序运行环境

  1. 最早的程序是需要直接操作硬件的,也就是说编写的程序除了需要的逻辑代码之外,还要把控制硬件代码也写进去,后面随着人们初步把这些公共代码抽离,就形成了操作系统
  2. 程序运行环境,包含硬件和操作系统. 操作系统就是操作硬件的程序,也是一个平台,让其他程序可以运行在操作系统之上,而不再需要直接操作硬件.现代操作系统为了安全,很多已经禁止直接的硬件操作行为
  3. 现代计算机组成:

CPU,内存,外部IO设备如鼠标,键盘,屏幕,打印机,磁盘等等

  1. 操作系统出现之后,也结束了程序员需要适配不同硬件平台的问题,都由操作系统去适配,代码API则是统一一套,节约了很多精力. 这也是很多软件设计的思想,没有什么问题是添加一层分层无法解决的,除了层级过多这个问题本身
  2. 软件多平台兼容性,也有使用中间代码和平台的如浏览器, JVM设计思路就是如此.
  3. BIOS(basic IO system),用来做硬件自检和引导程序启动功能的; bootstrap本意就是鞋子后面的布带,一个小提手

2.8 代码编译和链接

  1. 计算机无法直接运行源代码,不管是C,shell,js, python等等,最终都需要变成可执行二进制代码
  2. 编译步骤分为: 预处理,编译,汇编,链接4个大阶段

编译分为: 词法分析,语法分析,语义分析和中间代码生成, 中间代码优化,目标代码生成5个阶段
目标代码生成因为不同的硬件平台,所以中间代码环节是很重要的,意味着只需要在目标代码生成这个环节做多平台兼容处理,可以节省很多工作.
这种解决问题思路可以用在软件开发的各个环节,就是讲工作拆解,这样一旦有变化,不需要整体改动,只需要改动对应环节即可,大大增加代码灵活性
注意一般是一个代码文件生成一个目标代码文件,如.obj .class, 但实际程序可能会有很多个,这时候就需要将这些目标代码文件链接在一起.这个一般是链接器来解决.

链接,可以分为静态链接和动态链接, 顾名思义,静态链接就是编译时就链接进去,动态链接则是运行时或者运行前链接进去,类似懒加载方式. DLL就是为了解决程序之间公共代码冗余而专门抽离出来,也可以节约内存消耗.

  1. 编译时,虚拟内存地址以及执行时真实内存地址,这时候有一个地址转换,这也是为什么会有基地址的原因.
  2. 内存中程序占用: 存储变量,存储函数, 栈, 堆

2.9 操作系统和应用程序关系

  1. 操作系统是运行在硬件层之上, 也是一个平台; 应用程序则运行在操作系统之上
  2. 系统调用, 就是操作系统提供统一API接口, 程序直接调用, 操作系统保证行为和返回数据一致性,而程序员不用关心平台差异性.
  3. 程序可移植性,也是一样. 只要是在对应操作系统上验证可用,则可以运行在相同操作系统的不同机器上,而不用关心其硬件差异.

目前来说,一般都是相同操作系统具备移植性
但基于软件平台的,则可以跨操作系统如浏览器, JVM, 容器等等

  1. what you see is what you get,就是所见即所得, 这一点其实贯穿整个软件开发设计中,就是尽量让程序和结果之间关系简单直白一些,文档,注释,说明,引导,GUI图形化界面,提示等等都是为了达到这个目的
  2. 多任务, 也就是时间片机制. 以前都是单核CPU,为了可以同时运行多个任务,这时候将CPU的执行时间切片,每个任务轮流得到这个执行时间,这样表面看就是多个任务同时执行.

2.10 汇编语言

  1. .asm就是汇编文件后缀
  2. C语言可以和汇编代码混编,汇编代码是由助记符来帮助记忆和使用的
  3. 汇编代码和本地机器代码是一一对应的
  4. 汇编和反汇编, 前者就是把代码转为汇编语言代码, 后者则相反. 汇编器就是执行前者的工具,也有的汇编器可以执行后者
  5. 段定义,segment和end标记, 是构成程序的命令和数据的几何体加一个名字得到的

_TEXT
_DATA
_BSS
从上可以看到, 代码段,数据段,未初始化全局变量数据段是怎么来的了

  1. 过程procudure

proc和endp包起来的,相当于函数的形式,就叫做过程

  1. 汇编语言形式:

操作码和操作数
mov
add
push
pop
call
ret

  1. 寄存器

eax 累加寄存器
ebx 基址寄存器
ecx 计数寄存器
edx 数据计数器
esi 源基址寄存器
edi 目标基址寄存器
ebp 扩展基址指针寄存器
esp 扩展栈指针寄存器

x86 的32位寄存器都带了e,扩展的意思,因为16位名称是不带e的.这是为了区分
注意因为本身x86最开始是从8位,16位硬件开始扩展和设计的,这是为了兼容处理

  1. 函数调用

call
ret
注意在这个过程中,栈就是保存局部变量和信息的地方,调用结束则会清空栈中数据

  1. 全局变量和局部变量

注意生命周期不同, 使用方式不同, 管理方式也不同
变量如果寄存器空间足够则放在寄存器,不够则用栈存放;因为寄存器访问速度快得多

  1. 流程控制

goto
call
ret
cmp
jl(jump on less than)
jle
jge
jg

2.11 硬件控制

  1. windows提供系统调用方式访问硬件,直接操作硬件在目前2020年的操作系统中越来越少,主要是安全考量.
  2. 不过IOT物联网兴起,一些专用操作系统在硬件调用上是越来越便捷
  3. IO设备都是通过IO控制器进行访问和操作的, IO设备也是通过端口号进行区分的
  4. 外围设备和中断请求, IRQ, interrupt request. 就是终端当前运行程序,转到其他程序运行的必要机制

中断机制, 可以让程序快速响应各个任务,由于CPU执行速度较快,临时中断然后任务切换, 处理完成后再切换回去也很快,对外来说可能都是无感知的
外围设备的中断请求会使用不同于IO设备的端口其他编号,称之为中断编号

  1. 应对外围设备状态变化

轮询,太消耗资源
中断,比较合适,相当于主动发起请求,CPU响应即可

  1. DMA

就是外围设备数据直接加载到内存,不经过CPU转换
类似的, GPU目前也支持直接从固态硬盘加载数据到显存中,不需要经过CPU

  1. VRAM

vedio ram, 视频内存

2.12 计算机最简化智能

  1. 计算机发明出来就是帮助人类解决问题,而最终极的问题就是替代人类工作并思考–AI
  2. 计算机本身没有思考能力,但可以通过训练,让计算机能够在某些场景下像人类一样进行问题处理.这就是机器学习和人工智能.

注意这里,只是表现得跟人类一样,并不代表具备了真正的思考能力

  1. 例如人分辨一个动物是猫还是狗,其实就是提取了各种信息, 而计算机也可以通过训练,达到人类多少百分比的分辨能力,甚至可以超出人类的分辨能力
  2. 只不过,人类其实最厉害的就是学习和适应能力,制造工具能力. 而计算机目前要达到电影中的替代人类,还有很长的路要走,甚至永不可能达到.

2.13 C语言简介

AEJoy —— 最受欢迎的 5 个 Ae 表达方式 NOTE] 原文作者我意识到表达式可能令人生畏,有些人宁愿复制粘贴有用的代码,而不愿学习这门语言。对此我完全理解。因此,我想与您分享我的。这些是我几乎在每个项目中都会使用的表达式,我认为它们极大地提升了工作流程。 阅读详情

相关推荐

避坑指南:用逐飞开源库驱动MT9V03X摄像头时容易忽略的3个细节(附TFT显示优化技巧)

本文详细解析了在智能汽车竞赛中使用MT9V03X摄像头(总钻风)时常见的硬件连接、图像采集和TFT显示优化问题。重点介绍了逐飞开源库中容易被忽略的三个关键细节,包括电源管理、看门狗设置和中断优先级配置,并提供了针对IPS200和TFT180显示屏的优化技巧,帮助参赛队伍提升图像处理效率和显示质量。

study的专栏 746

python计算机入门_Python入门基础01——计算机基础

计算机基础扫盲1、什么是编程语言?什么是语言?为何要用编程语言?编程语言的本质就是一门语言,Python就是一门编程语言语言就是一种事物与另外一种事物沟通的表达方式/工具编程就是人把自己的思维逻辑,用编程语言表达出来编程的目的就是让计算机按照人类的思维逻辑去工作,从而解放人力2、计算机的世界里有几种角色?人--------------编程语言-------------计算机3、计算机五大组成部分4...

weixin_39862484的博客 250

MATLAB R2022b 安装教程

1. 下载安装先放资源链接,百度网盘太贵了不想续了,换了夸克网盘。1. 下载安装。

qq_51654158的博客 2万+

python交互式和文件式区别_python交互模式和命令行模式的简单区分

命令行模式在Windows开始菜单选择“命令提示符”,就进入到命令行模式,它的提示符类似C:\>Python交互模式在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,在Python交互模式下输入exit()并回车,就退出了Python交互模式,并回到命令行模式:区分命令行模式和Python交互模式:在命令行模式下,可以执行pyth...

weixin_39643336的博客 5425

小白 虚拟机 kali_Linux安装 详细教程

安装版本:VMmare workstation pro kali_Linux 安装环境:Window10 首先我们先了解一下什么是kali_linux: Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。每一季度更新一次。由Offensive Security Ltd维护和资助。最先由Offensive Security的Mati Aharoni和Devon Kearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行

m0_50917178的博客 9万+

Power Automate 最常用的十大场景以及解决方案

3.2 获取指定主题含有附件邮件,然后读取csv附件内容,插入数据库,调度执行存储过程,最后通过Power automate 发送paginated report 特殊格式报表给发件人。Power Automate 作为微软推出的自动化工作流工具,其适用场景非常广泛,尤其在数据库查询自动化方面能显著提升效率。2.8发送邮件,把生成csv文件当作附件,把生成html当作邮件内容在邮件boty展示。3.1 读取数据库数据,定时发送预警邮件并抄送附件和展示内容在邮件中。:已有微软产品栈,需快速实现部门级自动化。

qq_24388807的博客 3698

python 外部exe程序 交互_在python脚本中包含交互式命令行应用程序

I am interested in controlling an interactive CLI application from python calls.I guess at the most basic level I need a python script that will start a CLI application on the host OS. Pipe anything f...

weixin_39669204的博客 349

HDMI设计6--Video PHY Controller IP

Reference:https://china.xilinx.com/content/dam/xilinx/support/documentation/ip_documentation/vid_phy_controller/v2_2/pg230-vid-phy-controller.pdf 1. 序 Video PHY Controller IP是为实现与视频(DisplayPort和HDMI™技术)MAC传输或接收子系统的即插即用连接而设计的。视频MAC层和PHY层的接口是标准化的,能...

Archar_Saber的博客 8342

python程序打包成exe执行程序并执行

参考:https://www.cnblogs.com/valorchang/p/11357358.html 1.pyinstaller工具 pyinstaller -F -i text.ico -w mytext.py #这里的-w是用于打包成独立文件,不能进行交互 pyinstaller -F -i text.ico mytext.py #打包出来的exe中类似input的交互函数会生效 2.py2exe 开始执行exe文件 报错: 1.找不到requests模块 解决: 1)先查看本地是否有

qq_46020608的博客 327

Calibre LVS 问题解析

LVS常见问题与解决办法

m0_61544122的博客 2万+

【测开求职】面试题:数据结构 吐血整理

本篇文章是笔者为准备研究生复试以及校招而写,因此主要针对问答,注重理解,而不在于细节计算。涵盖考研范围内的所有知识内容,读者可以先查看上面的链接走一遍数据结构的整体框架结构。其中,重点难点以及易混淆的知识点,笔者用其他近30篇文章进行了详述,在知识点处贴好了链接,有需要的可以查阅。

vector的博客 7065

<<程序是怎么跑起来的>>学习笔记总结一

<<程序是怎么跑起来的>>学习笔记总结 1. 背景 作为IT行业从业者,跨行而来,也有6 7年了,虽然一直都有加强基础学习,但学而时习之.不断巩固复习是有很大帮助的,而且经典书常看常新,每次学习,都有不同的感悟. 计算机基础,其实有几门关键的课程: 操作系统 计算机组成原理 计算机网络 数据库原理 编译原理 数据结构与算法 C语言 汇编语言 java 设计模式 软件工程 数字图像处理 音视频技术 分布式计算 人工智能 2. 总结 本书<<程序是怎么跑

xiaohu21的博客 355

黏菌优化算法(SMA)详解:从生物智能到优化引擎

黏菌优化算法(SMA)是一种新型生物启发式优化算法,模拟多头绒泡菌的智能觅食行为。该算法包含接近食物、包围食物和抓取食物三个阶段,通过数学模型将生物行为转化为优化过程。SMA采用权重自适应机制和参数振荡模型实现探索与开发的平衡,具有参数简单、收敛性好等优势。算法可通过MATLAB/Python实现,并应用于函数优化、工程设计和神经网络训练等领域。研究表明SMA在求解复杂优化问题时表现优异,未来可通过混沌增强、混合策略等方式进一步提升性能。

qq_42212808的博客 661

程序是怎样跑起来的

  在程序员的开发中,使用的语言基本都是类似C、Java、Python等高级编程语言,那么我们日常编写的代码是如何在计算机上跑起来的呢?今天,就让我们一起来捋一捋程序跑起来的过程。 一、计算机组成 ​  现代计算机基本都是冯诺依曼体系,称为程序存储型计算机。主要包含了五个元素:输入(比如鼠标、键盘等)、输出(比如显示器、音响等)、存储器(比如内存、磁盘等)、运算器和控制器。其中的运算器和控制器再加...

DotWait的博客 4925

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

一文读懂《程序是怎样跑起来的》

《程序是怎样跑起来的》摘要(150字) 本书深入浅出地揭示了计算机程序的运行原理。CPU如同超速计算器,通过"取指令-解码-执行"的循环完成数十亿次简单运算。内存则像带编号的工作台,通过地址系统存储临时数据。书中重点解析了CPU的时钟频率限制、多核并行挑战,以及寄存器的高速特性。同时阐述了内存的栈/堆管理机制和指针概念,指出内存泄漏的危害。通过生活化比喻,本书让读者理解从代码到机器执行的完整过程,是了解计算机底层原理的经典入门读物。

心一信息 1150

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

《程序是怎样跑起来的》学习笔记

《程序是怎样跑起来的》学习笔记前言1. 对程序员来说CPU是什么1.1. CPU的内部结构解析1.2. CPU是寄存器的集合体1.3. 决定程序流程的程序计数器1.4. 条件分支和循环机制1.5. 函数的调用机制1.6. 通过地址和索引实现数组1.7. CPU的处理方式其实很简单2. 数据是二进制数表示的2.1. 用二进制数表示计算机信息的原因2.2. 什么是二进制数2.3. 移位运算和乘除运算的...

Jock2018的博客 1790

《程序是怎样跑起来的》阅读笔记

CPU(Central Processing Unit,中央处理器)是计算机的核心部件,负责执行计算机程序中的指令。它是计算机的“大脑”,几乎所有的计算和逻辑操作都由CPU完成。浮点数(Floating-Point Number)是计算机中用于近似表示实数的一种数据类型,尤其适合处理非常大、非常小或带有小数部分的数值。它的设计灵感来源于科学记数法,通过将数值分解为有效数字(尾数)和指数两部分,实现动态调整小数点的位置,从而灵活表示不同范围的数。大多数编程语言都提供两种浮点数类型,分别是单精度浮点型和。

weixin_73214143的博客 1153

《程序是怎样跑起来的》读书笔记

1.很多编程语言提供了两种能表示小数的数据类型:双精度(double precision)浮点型和单精度(single precision)浮点型。2.双精度浮点型的长度为64位,单精度浮点型的长度为32位浮点数将小数分为符号、尾数、基数和指数4个部分来表示由于计算机内部使用二进制,基数一定是2,所以实际的数在实际数据中,这3部分会共同占用64位(双精度浮点型)或32位(单精度浮点型)的长度(图3-4)。

2501_90508499的博客 856

【好书推荐】程序是怎样跑起来的

这本书在豆瓣评分中高达 `8.1` 分,算是口碑不错,有时间值得一看。 这本书讲的是程序在计算机中如何被执行的,程序运行的本质是什么,主要涉及了一些C语言和硬件底层相关的知识,当然还有很多 CSer 应该掌握的知识,感觉知识点和 `计算机是怎样跑起来的` 这本书的内容重合度比较高,两者算是查漏补缺吧。 至于受众,最好是学了点编程语言,但是对计算机底层还有程序在计算机中是如何运行所知甚少的初学者,嵌入式方向的工程师们如果对底层知之甚少也最好浏览一下,补补基础。

Eureka1024的博客 837

《程序是怎么跑起来的》读书笔记

好久没有写过这类读书笔记,犹记得上次写还是刚学android那会读《Android群英传》写过一篇,这次应公司远程实习任务的要求,来拜读《程序是怎么跑起来的》这本书,书不厚,三天半就看完了,但读完却是甚觉过瘾,唤醒了记忆里很多即将消逝的东西,回过头来看看现在所学的东西,感觉又深入理解了一次。 第一章:什么是CPU CPU的内部由寄存器、控制器、运算器和时钟四个部分组成; 寄存器用来暂

sinat_21112393的博客 1657

《程序是怎样跑起来的》了解汇编语言的好处

前言 这两天阅读了《程序是怎样跑起来的》,本书从计算机的内部结构开始讲起,以图配文的形式浅显地讲解了程序从鼠标双击到运行时,计算机是怎么处理的等内容。其和《计算机是怎样跑起来的》是一对,分别对应着《计算机科学导论》,《计算机组成原理》这两本大部头,对读不进去大部头,但又想了解程序是如何运行的小白来说可是福音。 其中读到关于作者对汇编语言的看法令人印象深刻,在此记录下。 简介 《程序是怎样跑起来的》...

weixin_45797022的博客 388

读<<程序是怎样跑起来的>>有感

在当今数字化的时代,程序无处不在,它驱动着我们的电脑、手机以及各种智能设备,为我们的生活带来了极大的便利。但你是否曾好奇,这些看似神奇的程序究竟是如何在计算机中跑起来的呢?《程序是怎样跑起来的》这本书,以通俗易懂的方式,为我们揭示了程序运行背后的原理。

liuxiang2524的博客 429

《程序是怎样跑起来的》有感

编译器的作用,就如同一位专业的翻译,将人类编写的高级编程语言,如C、Java等,翻译成计算机能够识别的机器语言。这个翻译过程,是程序运行的关键一步,它将抽象的代码转化为具体的指令,为程序在计算机中的执行奠定基础。在这个过程中,操作系统扮演着重要的角色,它负责管理计算机的硬件资源,为程序的运行提供一个稳定、高效的运行环境。这本书没有高深莫测的专业术语堆砌,而是用通俗易懂的语言,将程序运行的复杂原理娓娓道来,让我这个对计算机底层知识一知半解的读者,也能轻松跟上作者的思路,开启一场奇妙的探索之旅。

2402_87810904的博客 671

《程序是怎样跑起来的》读后感

读了《程序是怎么跑起来的》第一章,使我对CPU有了更深的了解,文中详细的介绍了CPU的结构和程序的运行机制,以及条件分支和循环机制,也让我明白了为什么用二进制表示信息,而文中强调在CPU的四个构成部分中,程序员只需要了解寄存器即可(程序是把寄存器作为对象来描述的),随着阅读我了解到了标志寄存器、基址寄存器和变址寄存器等新概念。 转载于:https://www.cnblogs.com...

weixin_33989058的博客 1172

《程序是怎样跑起来的》

例如,高级语言编写的“Hello World”程序,需经过编译或解释过程,转化为二进制代码,才能被计算机执行,这让我清晰认识到程序从编写到执行的初步流程。当程序启动,操作系统会将程序从硬盘加载到内存中,CPU按顺序读取内存中的指令并执行。例如递归函数,每次递归调用都会在栈中新增一层数据,若递归深度过大导致栈溢出,程序就会崩溃,这让我深刻理解程序运行时内存管理的重要性。通过这本书,我意识到程序运行的每一个细节背后都有复杂的硬件和软件机制在支撑,这种深入的理解对于编写高效、稳定的程序具有重要意义。

2502_90711341的博客 387

【程序是怎样跑起来的】第1章:对程序员来说CPU是什么

博客为参考《程序是怎样跑起来的》一书,自己所做的读书笔记。

qq_34222839的博客 1078
上一篇: <<程序是怎么跑起来的>>学习笔记总结一
下一篇: Flink 1.12.0学习与分享(pyflink)
闻香识代码
博客等级 码龄12年 314粉丝 223原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值