博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入理解计算机系统
阅读量:5098 次
发布时间:2019-06-13

本文共 1559 字,大约阅读时间需要 5 分钟。

程序运行的基础

程序语言到机器指令的过程

  • 1.hello.c 源程序一个文本文件,经过预处理(pre-processer)成为hello.i
  • 2.hello.i  修改的源程序,经过编译处理(compiler) 成为hello.s
  • 3.hello.s 汇编程序,经过汇编器(assembler)成为hello.o
  • 4.hello.o  一个二进制文件+printf.o 经过链接器linker成为可执行文件(executable) hello

操作系统

  • 文件是对I/O设备的抽象
  • 虚拟内存是对I/O设备和主存的抽象
    提供了一个每个进程都独自使用主存的假象.
  • 进程是对处理器,主存,I/O设备的抽象
    处理器在进程间切换实现交错执行的机制称为上下文切换

多线程和多进程

  • 进程:
    是并发执行的程序在执行过程中分配和管理资源的基本单位.一个程序可能包含多个进程.
  • 线程:
    是进程的一个执行单元,是进程内可调度实体.比进程更小的独立运行的基本单位
  • 线程可以共享资源,进程则是独立的地址空间.
    一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
  • 进程切换时,消耗的资源大,效率高。
    所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程

机器表示和计算信息

  • 数据的大小(data size)
    这些都是对于64-bit机器而言,64位机器

C declaration bytes

short | 2
int | 4
long | 8
char * | 8
float | 4
double | 8
程序的机器级表示

  • the program counter called %rip
    存储下一个要执行命令的地址在内存中
  • integer register file:
    adresses or integer data
  • condition code registers :
    条件代码寄存器,if and while statements
  • vector register :
    one or more integer or floating-point values.
  • object dump:
    对象转储. use objdump 可以进行disassemblers.
  • 寻址的基本操作:
    immediate : 立即数寻址,register 寄存器寻址, absolute :绝对寻址,indirect :间接寻址
    base+diaplacement:基址加偏移量, indexed:变址寻址,scaled indexed:比例变址寻址
    信息的读取:
    注意区分内存地址和寄存器地址,以及他们的表达式及数据之间的移动
    算术运算和逻辑运算
    控制语句:
    各种控制语句要尽可能的了解
    控制语句不要去使用goto语句,这会使程序变得非常复杂.

数组的分配和访问

  • 数组的定义

    数组的名称,数组元素大小,数组大小,起始地址,元素位置检索
    char a[12]
    int c[6]
    char *d[8]

    array element size total size start address element i

    a 1 12 \(x_{a}\) \(x_{a}+i\)
    c 4 24 \(x_{c}\) \(x_{c}+4i\)
    d 8 64 \(x_{d}\) \(x_{d}+8i\)

  • 多维数组(二维数组)

    \(T D[R][C]\)
    数组元素查找
    \[ & D[i][j]=x_{D}+L(C*i+j) \]

系统层面的输入输出

转载于:https://www.cnblogs.com/GeekDanny/p/9251016.html

你可能感兴趣的文章
POJ-1287.Network(Kruskal + Prim + Prim堆优化)
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
JSDoc规范
查看>>
大话文本检测经典模型:EAST
查看>>
文本主题模型之LDA(一) LDA基础
查看>>
linux基础命令-chgrp/chown/chomd
查看>>
待整理
查看>>
iOS 6
查看>>
Nginx入门篇-基础知识与linux下安装操作
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
1.linux ping:unknown host www.***.***
查看>>
http://jingyan.baidu.com/article/dca1fa6fa07000f1a44052f6.html
查看>>
第三方支付架构设计之—帐户体系
查看>>
诸城项目-开发日志
查看>>
fdisk (二) 详解(转)
查看>>
hdu 2768 Cat vs. Dog 最大独立集 巧妙的建图
查看>>
简单将集合的内容转为字符串
查看>>
Python pandas 0.19.1 Intro to Data Structures 数据结构介绍 文档翻译
查看>>