工作生活

开始

2019-07-03  本文已影响0人  Elijah_cs

本科学了四年计算机,感觉懵懵懂懂,c语言,数据结构,计算机组成原理等课程似懂非懂,东西可以做出来但是都感觉是七拼八凑的,感觉没有融合在一起成为一个体系,故想看看深入理解计算机系统,希望现在不会太晚。

从hello.c开始

一个程序例如printf("hello world!")是以ASCII标准来存储的,例如h对应104,则用一个8bit的信息来表示h,每个bit由0,1组成,则这个文本实际上也是一串字节序列来储存在文件的,每行都有"\n"来结束的。


hello.c

实际上,系统的所有信息,都是由一串比特表示的,区分不同数据对象的唯一方法是读到这些数据对象时的上下文,在不同的上下文中,一个同样的字节序列可能表示一个整数,浮点数或者机器指令。
hello.c是高级语言,为了能运行它,每条c语句必须转化为一系列的低级机器语言指令,然后这些指令按照一种称之为可执行目标程序的格式打包好并存放在磁盘上,目标程序也是可执行程序
Linux上: gcc -o hello hello.c
过程如下:


compiler.PNG

运行hello程序

键盘输入./hello后,程序将字符逐一读入到寄存器,再放入内存中,
也可以通过DMA技术直接将数据从磁盘拷贝到内存。
一旦目标文件hello的代码加载到内存,处理器就执行该程序的main程序的机器语言指令这个指令将“hello ,wordld\n:从朱唇中复制到寄存器,再从寄存器中复制到显示设备,最后显示在屏幕上。

运行机制相关

hello程序是放在一个操作系统去执行的,操作系统是一个控制硬件并向应用程序提供接口以使得它们对硬件进行操作。想hello这样的程序在操作系统上运行时,操作系统会提供一个假象,就好像系统只在运行这个程序,实际上,并不是这样的,它是作为一个进程在运行。进程时操作系统对正在运行程序的一个抽象,在一个系统可以同时的运行多个进程,即并发执行,一个进程的指令和另一个进程的指令时交错执行的CPU会切换进程,称之为上下文切换。操作系统需要保持跟踪进程运行所需要的状态信息,即上下文。
在这个hello的运行中,有两个进程:shell和hello进程,开始只有shell,当输入./hello按下回车后,shell通过一个专门的函数,即系统调用来执行请求,系统会将控制权交给操作系统,操作系统保存shell进程的上下文,创建有个新的hello进程以及其上下文,并将控制权交给hello程序,hello进程终止后,操作系统回复shell进程的上下文,并将控制权交还给他,hello执行完毕。

很重要的知识点-虚拟内存

虚拟内存是一个抽象的概念,他为每个进程提供了有个假象,即每个进程都在独占地使用主存,每个进程看到的内存是一样的,如图:


virtual memory

位运算

void swap(int *x,int *y)
{
    *x = *x ^ *y;
  *y = *x ^ *y;
*x = *x ^ *y;
}
short int v= -12345;
unsigned short uv = (unsigned short) v;
uv = 53191   
上一篇 下一篇

猜你喜欢

热点阅读