计算机系统学习笔记(1)-Hello World的一生。

#include <stdio.h>

int main()
{
    printf("Hello World\n");
}

上面是一个c语言的hello world程序,虽然少了return 0, 但这对本文的主题没有影响。上面的hello.c程序是以一系列的bytes(1byte = 8bits)形式在文件中存在,每一个byte有个整数值,对应一个字符,而这个整数值叫做ASCII码,由ASCII码组成的文件叫做text files.其余的文件叫做binary
files。

程序被其他的程序翻译成不同的形式:

源程序hello.c(text)会先被预处理器修改为hello.i(text), 比如:预处理器会根据指令#include<stdio.h>,把stdio.h头文件的内容直接插入到文件中。

被修改后的hello.i随后被编译器编译为hello.s(汇编语言text)。

hello.c再被assembler汇编译器编译为hello.o(机器语言binary)

最后,由于函数中有printf()函数,该函数属于c标准库,该函数在一个分开的预编译文件中叫做printf.o,要生成可执行文件,必须由Linker(连接器)把hello.o 和 printf.o文件链接起来,最后就生成了可执行文件hello.

如何执行以上的过程呢?

在我的mac os系统中,首先打开Terminal(终端), 然后在终端中用cd 命令定位到当前的文件位置,然后在终端中输入gcc -o hello hello.c即可完成以上的所有编译过程,并且生成可执行文件hello, 注意:这条语句中,gcc -o hello hello.c 中间的hello代表生成的可执行文件的名字。

如何运行可执行文件?

完成以上步骤后,只需要在终端输入./hello即可在终端上打印出hello world了,也可以通过双击可执行文件的额方法完成运行。

在我们的电脑中是如何运行可执行文件的呢?

电脑一般由以下几部分组成:

1. CPU(Central Processing Unit), 也可以叫做Processor.

主要由:register file, PC(program counter), ALU(Arithmetic/Logic Unit), USB(Universal Serial Bus) 构成,主要功能是:

执行存储在内存中的指令。它的核心是一个以word-sized(一个字大小)为基本单位的存储设备(or register), 叫做program counter(pc),在运行的任意时刻,pc 都指向一个在内存中的指令,当执行完当前指令后,pc移动到下一个指令。

2. Main memory(内存)

内存是一个临时的存储设备,当CPU运行的时候,内存用来临时存储程序和数据,当程序执行完,这些程序和数据都被内存清除,

3. Buses(传输的线路)

Buses 是用来传输数据的线路,Buses能传输固定大小的words, 一个word中的bytes在不同机器上的不同,有的是4bytes(32bits), 有的是8bytes(64bits),  并且我们假设buses 每次传输一个word.

4. I/O Devices(输入输出设备)

输入输出设备是系统与外界联系的桥梁,常见的I/O设备:键盘,鼠标,屏幕,磁盘(disk).

每一个I/O设备都通过controller或者adapter(适配器)与I/O Bus相连接,其中,controller和adapter的主要区别是,controller主要是直接在motherboard(main printed circuit board)上面,而adapter是一张插在motherboard上面的卡片

接下来回到重点,电脑运行可执行文件的过程是怎样的呢?

当我们在Terminal上面输入./hello之前,shell program(外壳程序)正在执行"等待我们输入"的指令,当我们键入"./hello"的时候,shell program把每一个字符通过Bus读入CPU中的register, 然后把指令存储在内存中。

当我们键入"enter"的时候,shell知道我们已经完成键入了,于是通过执行一系列指令把我们的可执行文件hello中的code和data通过磁盘(disk)复制到内存(memory).

当hello中的code和data被载入内存中后,CPU(processor)开始执行在main中的一系列的机器指令,通过指令把字符串"hello, world\n"复制到register file中,并且最终传输到输出设备----屏幕。

时间: 2024-10-09 17:28:51

计算机系统学习笔记(1)-Hello World的一生。的相关文章

深入理解计算机系统学习笔记(一)

程序的编译过程 为了说明程序的编译过程,我们用经典的hello world程序作为例子 #include <stdio.h> int main(int argc, char const *argv[]) { printf("hello world!!!\n"); return 0; } 在linux系统中,我们用GCC编译器将源程序文件helloworld.c编译成可执行目标文件helloworld. zengwh@zengwh:~/test_code$ gcc hello

《Linux内核分析》第六周学习笔记

<Linux内核分析>第六周学习笔记 进程的描述和创建 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 [学习视频时间:1小时 撰写博客时间:2小时] [学习内容:进程创建的过程.使用gdb跟踪分析内核处理函数sys_clone] 一.进程的描述 1.1 进程描述符task_struct数据结构(一) 1. 进程控制块PCB——task_struct 为了管理进程,内核

&lt;老友记&gt;学习笔记

这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的情路坎坷,事业成败和生活中的喜怒哀乐,无时无刻不牵动着彼此的心,而正是正平凡的点点滴滴,却成为最令人感动与留恋的东西. 人物:1.瑞秋•格林(RACHEL GREENE)由珍妮佛•安妮斯顿(Jennifer Aniston)扮演 瑞秋是莫妮卡的高中同学,在与牙医未婚夫的婚礼上脱逃至莫妮卡处. 2.罗

深入理解计算机系统读书笔记一 ---&gt; 计算机基础漫游

一.程序编译的不同阶段. 通常我们是以高级程序开发易于阅读的代码,我们通过语法规则推断代码的具体含义.但是计算机执行代码的时候就需要把代码解析成既定的可执行问题,计算机是如何处理的呢?这里以C语言hello.c文件为例来说明中间过程. #include <stdio.h> int main() { printf("hello world!\n"); } 先上张图. C语言源程序----预处理解析头文件和函数  --- 编译器解析成汇编语言 ---   翻译机器语言指令,打包

2016年7月19日学习笔记

2016年7月19日学习笔记 计算机系统的组成部分 计算机系统由硬件系统和软件系统两大部分组成 硬件系统 冯.诺依曼体系结构: 1946年数学家冯.诺依曼提出运算器,控制器,存储器,输入设备,输出设备. 具体变现为一下硬件: 运算器,控制器  ------>  CPU 存储器          ------>  内存(断电数据清空),硬盘(可永久存储数据) 输入设备------>  键盘,鼠标等 输出设备------>  显示器 打印机等 软件系统 OS : Operating S

oracle学习笔记 存储及raid技术概述

oracle学习笔记 存储及raid技术概述 本课以oracle数据库所运行的环境,讲一下存储和raid技术. 一)oralce生产环境里的结构 先说一下oracle所在的环境. 有一种结构: 两个服务器.两个光纤存储交换机.两个存储, 它们通过网线相互连接在一起. 每个服务器接两个交换机, 每个交换机连两个服务器同时连两个存储, 每个存储和两个交换机有连接. 这是oracle数据库相对比较典型的正规的运行环境. 每个服务器上都装Linux和oracle数据库软件, oracle数据库建在存储上

Deep Learning(深度学习)学习笔记整理系列之(一)

Deep Learning(深度学习)学习笔记整理系列 [email protected] http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0  2013-04-08   声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联

计算机操作系统学习笔记_1_操作系统概述

操作系统概述 一.操作系统的概念.特征.功能和提供的服务 1.操作系统的概念     操作系统是计算机系统中最重要.最基本的系统软件,操作系统位于硬件和用户程序之间.    对于用户来讲:它能向用户提供使用计算机的接口;    从资源管理角度来看:它能管理计算机软硬件资源,提高其利用率;    再者,利用虚拟机技术(如WMWare,VirtualBox,Java虚拟机等),扩展了计算机的功能和使用范围.     因此,操作系统的定义为:操作系统是控制和管理计算机软.硬件资源,以尽可能合理.高效的

&lt;&lt;linux命令行与shell脚本编程大全&gt;&gt;学习笔记(1)

一章初识linux shell 一.什么是linux 1.linux系统可大致划分为四部分: l Linux内核 l GNU工具组件 l 图形化桌面环境 l 应用软件 在linux系统里,这四部分中的每一部分都扮演着一个特别的角色,但如果将他们分开,每一部分都没太大的作用. 1)探究linux内核 Linux系统的核心是内核,内核控制着计算机系统上的所有硬件和软件,必要时分配硬件,有时需要执行软件. 内核基本负责以下四项主要功能: l 系统内存管理 l 软件程序管理 l 硬件设备管理 l 文件系