zoukankan      html  css  js  c++  java
  • 深入理解计算机系统

    程序运行的基础
    程序语言到机器指令的过程

    • 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)  ]

    系统层面的输入输出

    不要用狭隘的眼光看待不了解的事物,自己没有涉及到的领域不要急于否定. 每天学习一点,努力过好平凡的生活.
  • 相关阅读:
    Android Gradle Plugin指南(五)——Build Variants(构建变种版本号)
    文件内容操作篇clearerr fclose fdopen feof fflush fgetc fgets fileno fopen fputc fputs fread freopen fseek ftell fwrite getc getchar gets
    文件操作篇 close creat dup dup2 fcntl flock fsync lseek mkstemp open read sync write
    嵌入式linux应用程序调试方法
    version control system:git/hg/subversion/cvs/clearcase/vss。software configruation management。代码集成CI:Cruisecontrol/hudson/buildbot
    最值得你所关注的10个C语言开源项目
    如何记录linux终端下的操作日志
    CentOS 5.5 虚拟机安装 VirtualBox 客户端增强功能
    sizeof, strlen区别
    C/C++嵌入式开发面试题
  • 原文地址:https://www.cnblogs.com/GeekDanny/p/9251016.html
Copyright © 2011-2022 走看看