计算机系统

目的

这里只是初步了解了计算机系统,是为了更清晰地了解程序中进程和线程的概念。

程序与机器的交互

我们在学一门语言的时候,总是会写下hello world的代码,据说这回带来好运。当我们不断学习的过程中,我们只需要把自己的思想用这些高级语言(c/c++/java/python),那么计算机又是如何识别出这些命令的呢。
下面我们看一段最为经典的c代码:

# hello.c
#include <stdio.h>
 
int main()
{
 printf("Hello World\n");
 return 0;   
} 

hello程序的生命周期是从我们开始创建它开始。
大部分的现代计算机系统都使用ASCII标准来表示文本字符,这种方式实际上使用一个唯一的单字节大小的整数值来表示每个字符。单字节由8个比特(也就是0和1组成的位)组成一组。hello.c的ASCII的文本表示如下图所示。

这里是想说明,我们写的程序语言最终都要翻译成机器可识别的二进制信息。
在这里插入图片描述

可执行目标文件的生成

高级的c语言程序能够被人读懂,然而转为机器能读懂的低级语言时,需要按照机器能够识别的一种固定语言格式来转换,这个过程姑且称为编译吧。下面这张图就是编译系统,完成了源文件到目标文件的转换。
在这里插入图片描述
计算机可执行的目标文件被存放在磁盘中。

处理器执行目标文件

系统硬件

在这里插入图片描述

  • I/O 总线 实际上是贯穿整个系统的一组电子管道,它传送定长的字节块,也就是字,字中的字节数是一个基本的系统参数。平时我们区分32位和64位的系统就是看这个字来区分的,如果字是4个字节就对应32位,8个字节就是64位。

  • 主存其实就是内存。

运行hello程序

hello程序已经写好了,我们现在在shell上输入运行它的命令:

linux> ./hello

计算机将这串字符逐一读入寄存器,再把它放入到内存中;
在这里插入图片描述
当我们敲入回车表明我们结束了命令的输入,接下来计算机就加载可执行的hello文件,将hello目标文件中的代码和数据从磁盘复制到内存。
所谓加载:从主存复制一个字节或者一个字到寄存器,以覆盖寄存器原来的位置
在这里插入图片描述
一旦hello被加载到内存,处理器就开始执行hello 程序的main程序中的机器语言指令,并输入到显示设备。
在这里插入图片描述
hello程序的流程大概就是这样的。我们在运行程序时,其实涉及到了对硬件的控制(显示器、主存储器、CPU),这些复杂的控制都是由操作系统自动完成的。

操作系统

操作系统就相当于一个管理硬件和软件的中介服务:
计算机系统分层视图
操作系统有两个基本的功能:

  1. 防止硬件程序被失控的应用程序滥用
  2. 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。
    操作系统通过抽象完成了这两个任务:

在这里插入图片描述
进程是操作系统对一个正在运行的程序的一种抽象。
线程则时混合在进程中的其它操作。我的理解就是打开一个软件相当于一个进程,而对软件的各种操作则被分成了线程

总结:

对进程和线程有一个形象的理解了,但对于多线程和单线程本质上有什么不同,仍然不能理解,待以后再深刻理解后再单独写写。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值