第一章-计算机系统慢游
1.1 信息就是位+上下文
定义:
- 计算机系统由系统硬件与系统软件组成。
- 信息就是位+上下文。
- 只由ASCII字符组成的文件称为文本文件,其他所有的文件都称为二进制文件。
- C语言是一门系统级编程语言
#include <stdio.h>int main (void)
{printf("helllo world\n");return 0;
}
扩展思考:
#include <stdio.h>
可以去掉吗?如果想去掉应该怎样写?- <>代表了什么意思?
1.<>与" "代表的是寻址方式的不同,前者是绝对路径,后者是相对路径,但是单纯的将<>替换为""不行哦
2.想要去掉#include<>stdio.h,首先要明白这里做了什么,向标准输出数据,这里其实会涉及到底层的io,系统调用,在第10章你们就会学到,所以可以直接调用系统调用来想标准输出输出hello world
1.2 程序被其他程序翻译成不同的格式
定义:
- 编译系统:预处理器,编译器,汇编器,链接器
- 预编译阶段:将以#开头的命令修改为原始的C程序,并生成以.为后缀的程序
gcc -E hello.c -o hello.i
841 # 943 "/usr/include/stdio.h" 3
842
843 # 8 "hello.c" 2
844
845 int main(void)
846 {
847 printf("hello world\n");
848 return 0;
849 }
- 编译阶段:编译器将文本文件hello.i翻译成hello.s,这是一个汇编语言程序
gcc -S hello.i -o hello.s1 .file "hello.c" 2 .section .rodata3 .LC0:4 .string "hello world"5 .text6 .globl main7 .type main, @function8 main:9 .LFB0:10 .cfi_startproc11 pushq %rbp12 .cfi_def_cfa_offset 1613 .cfi_offset 6, -1614 movq %rsp, %rbp15 .cfi_def_cfa_register 616 movl $.LC0, %edi17 call puts18 movl $0, %eax19 popq %rbp20 .cfi_def_cfa 7, 821 ret22 .cfi_endproc23 .LFE0:24 .size main, .-main25 .ident "GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-36)"26 .section .note.GNU-stack,"",@progbits
- 汇编阶段:汇编器将hello.s翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序的格式,保存在hello.o中,二进制文件
gcc -c hello.s -o hello.o
objdump -d hello.ohello.o: 文件格式 elf64-x86-64Disassembly of section .text:0000000000000000 <main>:0: 55 push %rbp1: 48 89 e5 mov %rsp,%rbp4: bf 00 00 00 00 mov $0x0,%edi9: e8 00 00 00 00 callq e <main+0xe>e: b8 00 00 00 00 mov $0x0,%eax13: 5d pop %rbp14: c3 retq
- 链接阶段:链接器负责合并各种库文件,例如汇编生成的目标文件吗,系统库文件,链接库文件,得到可执行文件hello,可以被加载到内存中执行
gcc hello.c -o hello //从源文件到目标文件
./hello
hello world
扩展阅读:
- 编译阶段需要检查代码的规范性,以及语法错误
1.3 了解编译系统如何工作是大有益处的
益处:
- 优化程序性能
#include<stdio.h>
#include <sys/time.h>
double now()
{struct timeval tv = { 0, 0 };gettimeofday(&tv, NULL);return tv.tv_sec + tv.tv_usec / 1000000.0;
} void addUseParam(size_t* num)
{double start = now();size_t i;for(i = 0; i < 1000000000; i++){*num += i;} printf("time = %lf for addUseParam\n", now() - start);}void addUseValue(size_t* num)
{double start = now();size_t i;size_t value = 0;for(i = 0; i < 10000000000; i++){value += i;}*num = value;printf("time = %lf for addUseValue\n", now() - start);
}int main(void)
{size_t num = 0;addUseValue(&num);addUseParam(&num);return 0;
}
- 理解链接是出现的问题
- 避免安全漏洞
1.4 处理器读并解释储存在内存中的指令
- shell的工作原理
1.1.4 系统的硬件组成
- 总线:贯穿整个系统的是一组电子管道,称作总线。
- I/O设备:是系统与外界联系的通道,例如用于输入的键盘与鼠标,用于输出的显示器,以及保存数据的磁盘。
- CPU:中央处理单元,是解释存储在主存中的指令引擎
- ALU:算术/逻辑单元
- PC:程序计数器,处理器核心,任何时候都指向主存中的某条机器语言指令。
- USB:通用串行总线
- 主存:临时存储设备,用于在程序运行时存放程序与程序处理的数据。
- 物理构成:DRAM
- 逻辑构成:线性的字节数组,每个字节有唯一地址,从零开始。
- 指令集架构与微体系结构的区别:指令集架构描述每条机器指令执行的效果,微体系结构描述处理器是如何实现的。
1.5告诉缓存至关重要
- 高速缓存的实现:采用静态随机访问存储器实现(SRAM)
- 局部性原理:程序具有访问局部区域里的数据和代码的趋势
1.7 操作系统管理硬件
- 操作系统的功能:
- 防止应将被失控的应用程序滥用;
- 向应用程序提供简单一致的机制来控制复杂而又大不相同的低级硬件设备。
- 文件是对I/O设备的抽象
- 虚拟内存是对主存和磁盘I/O的抽象
- 进程是对处理器,主存和I/O设备的抽象
进程
- 进程是操作系统对一个正在进行的程序的一种抽象。
- 上下文切换:多个进程之间可以交错进行的这种机制
- 操作系统保存跟踪进程运行所需的所有状态信息,这种状态就是上下文。
- 从一个进程到另一个进程的转换是有操作系统内核来管理的。内核是操作系统常驻内存的部分。
线程
- 一个进程是有多个线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。
虚拟内存
- 地址空间的最上面区域是保留给操作系统的代码和数据的,地址底层的区域存档的是用户进程定义的代码和数据,地址由下往上增大
- 栈:位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数调用。
- 内核虚拟内存:地址空间顶部的区域是为内核保留的。
文件
文件就是字节序列。
1.9 重要主题
- 系统不仅仅是硬件,系统是系统硬件与系统软件的集合体,他们必须共同协作以达到运行应用程序的最终目的。
Amdahi定律
- 当我们对系统的某个部分进行加速时,其对系统整体性能的的影响取决于这部分系统的重要性和加速程度。
- 要想显著加速整个系统,必须提升全系统中相当大的部分的速度。
并发与并行
- 线程级并发:
- 多处理器的使用可以从两方面提高系统性能:
- 减少了在执行多个任务时模拟并发的需要。
- 使程序运行的更快。
- 指令级并行:
- 流水线
- 超标量
- 单指令、多数据并行
- 硬件允许一条指令产生多个可以并行执行的操作。
- 抽象的使用是计算机科学中最重要的概念,例如为一组函数规定一个简单的API就是一个很好的编程习惯。
第一章-计算机系统慢游相关推荐
- 人工智能是利用电子计算机模拟人类智力,第一章 计算机系统.ppt
多媒体计算机 扫描仪 DVD光盘及DVD 光盘刻录机 数码像机 投影仪 常用设备 基本操作 冷启动 热启动 RESET方式 启动计算机 顺序: 应用程序 ? 主机 ? 外设 ? 电源 (P27) 关闭 ...
- 深入理解计算机系统(原书第三版)系列 第一章 计算机系统漫游
大学学习 计算机操作系统,当时太年轻,没有重视起来,今天 重拾书本,来看看这本传说中的 豆瓣9.9的神书 ,夯实基础,基础是石,敲出希望之火. 第一章 计算机系统漫游
- 第一章计算机系统概述答案,1第一章计算机系统概论.ppt
1第一章计算机系统概论,计算机系统概论,计算机系统概论pdf,计算机系统概论答案,计算机系统概论英文,计算机系统概论下载,计算机系统概论中文,民航概论ppt第一章,饭店概论第一章课件,秘书学概论第一章 ...
- 【深入理解计算机系统-学习笔记】第一章 计算机系统漫游
第一章 计算机系统漫游 简介: 我们通过跟踪hello程序的生命周期来开始对系统的学习--从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止 我们将沿着这个程序的生命周期,简单得介绍一些逐 ...
- 程序员视角的计算机系统 第一章 计算机系统 之旅
程序员视角的计算机系统 第一章 计算机系统 之旅 一个计算机系统由硬件和系统软件组成,硬件和软件一起工作来运行应用程序. 系统的特定的实现随时间的流逝而改变,但是它的本质性的概念不会改变. 所有的计算 ...
- 计算机二级考试公共基础知识——第一章计算机系统
第一章计算机系统 概述 公认的第一台电子计算器ENIAC 计算机发展的四个阶段 第一阶段,1946年至20世纪50年代后期:电子管计算机时代 第二阶段,二世纪50年代后期至20世纪60年代中期:晶体管 ...
- 软考 程序员教程-第一章 计算机系统基础知识
软考 程序员教程-第一章 计算机系统基础知识 为了督促自己学习,告别懒惰,在此先给自己定个小目标,请大家监督哟! 目标:一个月内过一遍<程序员教程>,下一个月开始上真题. 简单看了下,我在 ...
- 深入理解计算机系统第四版_《深入理解计算机系统》读书笔记 —— 第一章 计算机系统漫游...
本书第一章沿着一个程序的生命周期,简要地介绍一些逐步出现的关键概念.专业术语和组成部分. 一.信息就是位+上下文 在计算机系统中所有的信息都由一串比特来表示. 一串相同的比特(或者几个相同的字节)可以 ...
- csapp第一章 计算机系统漫游 学习和理解
计算机系统是由硬件和系统软件组成的. 系统的具体实现在变,但系统内在的概念没有变. 所有的系统都有相似的硬件,相似的软件组件,它们执行着相似的功能. 这些组件是如何工作的?这些组件是如何影响程序的正确 ...
最新文章
- 毕业,新的开始,撸起袖子加油干!
- 开发中内存溢出问题及解决
- ProxylessNAS pytorch
- https协议 ppt 下载卷_做PPT被版权吓得心颤颤?教你如何搞到靠谱素材
- 在我生命里留下温暖记忆的一位老师
- 推荐一个AutoCad查看器——Free DWG Viewer试用
- lumanager mysql密码_LuManager单独安装mysqli
- react hooks_如何破坏React Hooks的基础
- 目标检测无痛涨点:大白话 Generalized Focal Loss
- Mybatis官方文档中的(XML映射文件)模块(半途凉了)
- PHP之wampserver修改根目录与默认页面
- 2018.08.21随笔
- 用户服务协议和隐私政策
- 亚马逊云服务器账号注册,免费申请12个月aws亚马逊云详细教程
- cli模式下php会超时吗,php cli模式下调试
- 1645. Hopper Company Queries II
- 如何在网页版163邮箱中添加别的邮箱
- d^3CTF web部分wp
- 免费的网页原型制作工具
- 蓝桥杯 试题 B 既约分数