一起学习计算机系统(1)

本文介绍了ASCII标准的历史、作用以及在计算机系统中的应用,详细探讨了Hello.c程序的编译和运行过程,涵盖了内存层次结构、操作系统功能、进程和线程管理、虚拟内存、文件系统、网络通信协议,以及并发与并行处理的概念。
摘要由CSDN通过智能技术生成

ASCII标准是什么
ASCII(美国标准信息交换码)是一种广泛使用的字符编码标准。它由美国国家标准学会(ANSI)于1963年发布,最近的修订版于1986年发布。ASCII标准定义了128个字符,包括26个大写字母、26个小写字母、10个数字、标点符号和一些控制字符。每个字符都用一个7位的二进制数表示,可以表示的字符范围是0-127。

ASCII标准使不同计算机和通信设备能够共享和交换信息,它为每个字符分配了一个唯一的二进制码,这样可以确保发送和接收设备之间的一致性。ASCII标准仍然被广泛使用,尤其在计算机和互联网通信中,它是所有现代字符编码的基础。

hello.c程序是以字节序列的方式储存在文件中的,每个字节都有一个整数值,对应某些字符。
系统中所有的信息:包括磁盘文件,内存中的程序,内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。
为了能在系统上运行hello.c程序,每条c语句都必须被其他程序转化为一系列的低级机器语言指令。这些指令按照一种称为可执行目标程序的格式打好包,并以二进制磁盘文件的形式存放起来,目标程序也称为可执行目标文件。
编译系统动作:预处理器、编译器、汇编器、链接器

计算机系统里的单位:
位(bit):位是计算机中最小的存储单元,只能表示0或1,是二进制的基本单位。
字节(Byte):字节是计算机中常用的存储和传输单位,一字节等于8位。

计算机系统硬件的组成:总线、I/O设备、主存(动态随机存取存储器DRAM)、处理器(CPU)

Hello.c程序是一个简单的C语言程序,用于输出"Hello, World!"字符串。它的运行细节可大致分为以下步骤:
编译:将源代码Hello.c编译为可执行文件,这个过程将源代码翻译成机器语言指令以便计算机能够执行。使用C编译器(如GCC)来进行编译,运行命令类似于:gcc Hello.c -o Hello。
链接:编译器将Hello.c源文件中的函数和库文件进行链接,创建一个可执行文件。这个可执行文件通常是一个二进制文件,包含了程序的完整指令集。
加载:操作系统将可执行文件加载到内存中,并为程序分配所需的内存空间。
运行:操作系统向处理器发出开始执行程序的指令,处理器按照程序的指令对数据进行处理,并将结果输出。

对于Hello.c程序的具体运行细节,主要分为以下几个步骤:
在程序开始执行时,操作系统为程序分配内存空间,包括代码区、全局变量区、堆和栈。
程序从main函数开始执行,按照顺序依次执行程序中的语句。
Hello.c中的printf函数会在终端输出"Hello, World!"字符串。
在执行完所有语句后,程序执行完毕,操作系统会回收分配给程序的内存空间。
总之,Hello.c程序的运行过程涉及编译、链接、加载和实际的程序执行。通过这些步骤,程序能够成功输出"Hello, World!"字符串。

存储器层次结构是计算机体系结构中用于组织和管理计算机内存的一种层次化结构。它主要由以下几个层次组成,从下到上依次为:

寄存器:寄存器是位于CPU内部的最快速度的存储器,用于暂时存储程序指令、数据和中间结果。寄存器的存取速度非常快,但容量较小。

高速缓存(Cache):高速缓存是位于CPU和内存之间的存储器级别,用于存放最常用的指令和数据。高速缓存的访问速度快于内存,但容量有限。

主内存(主存):主内存是计算机中用于存放程序和数据的主要存储区域。它的容量较大,但相对于寄存器和缓存,存取速度较慢。

辅助存储器(外存):辅助存储器是计算机中用于长期存储信息的存储设备,包括硬盘、固态硬盘、光盘、磁带等。辅助存储器的容量较大,但访问速度较主内存慢。

存储器层次结构的设计目标是在性能、成本和容量之间达到一个平衡。较低层次的存储器容量小但速度快,主要用于存放最常用的数据;较高层次的存储器容量大但速度慢,用于存放较少使用的数据。
CPU在执行程序时,会根据存储器层次结构,先从寄存器中获取数据,如果数据不在寄存器中,则从高速缓存获取,再次不在则从主内存获取,最后再从辅助存储器中获取。这个过程被称为存储器层次结构的访问过程,目的是通过利用不同层次存储器的速度和容量特性,提高计算机的整体性能。

操作系统的功能:
操作系统是计算机系统中非常重要的一部分,它具有以下主要功能:
进程管理:操作系统负责管理计算机系统中的进程。它分配和回收进程所需的资源,调度进程的执行顺序,以及提供进程间的通信和同步机制。
内存管理:操作系统管理计算机系统中的内存资源。它负责将内存分配给进程,并进行内存的回收和释放。此外,操作系统还提供内存保护和虚拟内存等功能,以提供更高效和安全的内存管理。
文件系统管理:操作系统管理计算机系统中的文件系统。它提供文件的创建、读取、写入和删除等操作,同时管理文件的磁盘空间分配,保证文件系统的稳定和可靠性。
输入输出管理:操作系统负责管理计算机系统的输入输出设备。它提供优化和控制输入输出操作的接口,处理输入输出的缓冲和调度,以提高系统性能和可靠性。
用户接口:操作系统提供与用户进行交互的接口,包括命令行界面(CLI)、图形用户界面(GUI)和应用程序接口(API)等。用户可以通过这些接口与操作系统进行通信和操作计算机系统。
网络管理:现代操作系统通常提供网络功能,管理计算机系统中的网络连接和通信。它负责处理网络协议、数据传输和网络安全等问题,以保证网络的稳定和可靠性。
设备管理:操作系统管理计算机系统中各种硬件设备的驱动程序和接口。它负责设备的初始化、配置和控制,以及处理设备的中断和错误等情况。
总之,操作系统具有多种功能,它负责管理和控制计算机系统中的各种资源,并提供简单而有效的接口,以使用户和应用程序能够更方便地使用计算机系统。

操作系统有两个基本功能:1、防止硬件被失控的应用程序滥用2、向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备,通过几个基本的抽象概念来实现这两个功能(进程、虚拟内存和文件)

进程
进程是操作系统中一个执行中的程序的实例。简单来说,进程是计算机中正在运行的程序。
每个进程都有自己的地址空间,包括程序代码、数据、堆和栈等。进程还拥有资源,如CPU时间、文件和设备等。操作系统为每个进程分配一些资源,并管理这些资源的使用。
进程的特点包括:
动态性:进程是动态创建的,当一个程序被执行时,操作系统会为它创建一个进程。
并发性:多个进程可以同时在计算机系统中运行,每个进程独立执行。
独立性:每个进程在运行时都有自己的地址空间和资源,进程之间互相独立,彼此不会干扰。
可重定位性:进程可以运行在不同的计算机系统、不同的地址空间中,不受限于特定的物理位置。
阻塞性:进程可能因为等待某些事件(如I/O操作完成、资源可用等)而暂停执行,这种状态称为阻塞状态。
操作系统通过进程管理功能来管理和控制进程的创建、调度、通信、同步、资源分配等。进程管理使得操作系统能够同时运行多个程序,并有效地利用计算机系统的资源,提高系统的性能和可靠性。

线程
线程是操作系统中能够独立进行调度和执行的最小单位。它是进程的一部分,一个进程可以包含多个线程。
与进程不同的是,线程共享同一个进程的资源,如内存空间、文件和设备等。每个线程有自己的栈空间和寄存器集合,但共享静态存储区和堆空间。由于线程在同一个进程中执行,它们之间的通信和数据共享更加方便和高效。
线程的特点包括:
轻量级:相比进程而言,线程的创建和上下文切换的开销较小。
并发性:多个线程可以在同一时间并发执行,提高系统的资源利用率和响应性能。
共享资源和同步机制:多个线程共享同一个进程的资源,需要使用同步机制来保证线程之间的安全访问。
可以独立执行:线程可以独立执行任务,通过线程调度器来进行切换和控制。
线程的使用可以提高程序的性能和响应性能。线程可以在同一个进程中同时执行不同的任务,可以实现并发和并行执行。多线程程序通常可以更高效地利用计算机系统的资源,提高系统的吞吐量和响应速度。
线程的创建和管理由操作系统提供的线程库和API来实现。开发人员可以使用这些库和API来实现多线程程序,并通过线程同步机制来保证线程之间的正确协作和数据共享。

虚拟内存
(程序代码和数据、堆、栈、共享库、内存虚拟内存)
虚拟内存是一种计算机系统的内存管理技术,它将主存(也称物理内存)和辅助存储器(如硬盘)组合起来,为每个进程提供一种假象,即每个进程都拥有一块连续且私有的地址空间。
在虚拟内存中,每个进程可以访问一个相对较大的地址空间,而不必关心实际物理内存的大小。这使得每个进程可以拥有比实际物理内存更大的内存空间,从而提高了系统的扩展性和效率。
虚拟内存的基本原理是将进程的地址空间分割成固定大小的页(通常为4KB),并将这些页映射到主存或辅助存储器上。当进程需要访问特定页时,虚拟内存管理单元(MMU)将虚拟地址转换为物理地址,然后访问对应的数据。
虚拟内存的优势包括:
扩展性:每个进程都可以使用比实际物理内存更大的虚拟地址空间,从而允许运行更大的程序和处理更多的数据。
内存管理:虚拟内存可以自动将进程所需的页加载到物理内存中,从而提供灵活的内存管理机制。
内存保护:虚拟内存将进程的地址空间隔离开来,不同的进程无法直接访问对方的内存,从而提高了系统的安全性。
虚拟存储器:虚拟内存可以使用辅助存储器作为主存的扩展,使得程序可以处理比物理内存更大的数据集。
虚拟内存的实现需要硬件支持(如MMU)和操作系统的协同工作。操作系统提供了虚拟内存管理的功能,包括页表的管理和页的置换策略等。虚拟内存的使用允许操作系统以更加高效和灵活的方式管理和分配系统的内存资源。

文件
文件就是字节序列、每个IO设备,包括磁盘,键盘,显示器,甚至网络都可以看成文件。系统中所有的输入输出都是通过使用一小组unix IO的系统函数调用读写文件来实现的。

系统之间的网络通信
系统之间的网络通信是指不同计算机或设备之间通过网络进行数据传输和交互的过程。这种通信可以在本地局域网(LAN)内进行,也可以在广域网(WAN)上进行。
系统之间的网络通信可以通过不同的协议和技术来实现,其中一些常见的包括:
IP协议:IP(Internet Protocol)协议是互联网上使用的主要协议之一,它定义了数据如何在网络上进行分组传输。
TCP协议和UDP协议:TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是在IP协议之上的传输层协议。TCP提供面向连接的可靠数据传输,而UDP提供面向无连接的不可靠数据传输。
HTTP协议和HTTPS协议:HTTP(Hypertext Transfer Protocol)和HTTPS(HTTP Secure)是应用层协议,用于在客户端和服务器之间传输超文本和其他数据。
WebSocket协议:WebSocket是一种在Web浏览器和服务器之间进行全双工通信的协议,允许实时交互和实时更新数据。
系统之间的网络通信通常涉及客户端和服务器之间的交互,其中客户端发送请求,服务器进行响应。通过网络通信,系统可以实现远程访问、数据传输、资源共享和分布式计算等功能。
网络通信还涉及一些其他的概念和技术,如IP地址、端口号、DNS解析、路由器、防火墙和代理等。这些都是为了保证网络通信的安全性、可靠性和效率。

Telnet是一种网络协议和工具,用于远程登录到远程主机或设备并进行命令行交互。它是一种简单的文本协议,使用基于流的传输控制协议(TCP)作为传输层协议。
Telnet协议允许用户通过网络连接到远程主机,并在远程主机上执行命令和操作。通过Telnet,用户可以像本地终端一样操作远程主机上的程序和服务。
Telnet工具是一种用于实现Telnet协议的客户端应用程序,用户可以使用Telnet工具在命令行界面上输入远程主机的地址和端口号,然后建立与远程主机的连接,进行远程登录和交互操作。
由于Telnet通信是明文传输的,不提供加密和安全机制,因此在传输敏感信息时,Telnet不是安全的选择。为了提供更安全的远程登录和通信方式,通常使用SSH(Secure Shell)协议替代Telnet。SSH协议通过加密和身份验证机制提供了保密性和完整性,被广泛用于远程登录和管理。
总结来说,Telnet是一种用于远程登录和交互的网络协议和工具,提供了命令行方式在远程主机上进行操作。但因为其安全性不足,SSH协议已经取代了Telnet在安全环境下的使用。

并发和并行
并发指的是同时处理多个任务的能力。在一个系统中,多个任务可以交替进行,并共享系统资源。每个任务可能被分配一些处理时间,并在时间片轮转的方式下进行交替执行。虽然在任意时间点只有一个任务被执行,但由于任务之间的切换速度非常快,给人的感觉是它们在同时运行。
并行则是指系统同时执行多个任务的能力。在一个多核或多处理器系统中,多个任务可以同时在不同的处理器或核上进行处理。每个任务有自己的执行线程或进程,可以独立进行运算。与并发不同,并行所需的硬件资源支持可以同时处理多个任务,而不仅是轮流执行它们。

线程级并发
线程级并发是指在计算机程序中使用多个线程来实现并发执行的方式。在一个程序中,可以创建多个线程,每个线程可以独立执行不同的任务或操作。
使用线程级并发可以提高程序的运行效率和响应性。通过将任务分解为多个线程,可以让不同的线程同时执行不同的部分任务,从而实现任务的并行执行。这样可以充分利用多核或多处理器系统的硬件资源,提高程序的整体性能。同时,使用多个线程还可以改善用户体验,使程序在进行耗时操作时仍能保持响应。
线程级并发的实现可以通过多种方式,其中一种常见的方式是使用线程库或框架来创建线程并管理线程的调度和同步。例如,在Java中可以使用Java的线程库来创建和管理线程;在Python中可以使用Python的线程模块来进行线程管理。这些线程库提供了一些API和机制,用于创建和启动线程,设置线程的属性,进行线程间的通信和同步等操作。
然而,线程级并发也面临一些挑战和问题。多线程编程需要处理并发访问共享资源的问题,如数据竞争和死锁。同时,线程间的通信和同步也需要仔细设计和管理,以确保线程之间能够正确地协作和共享数据。
总结来说,线程级并发是一种在计算机程序中使用多个线程来实现并发执行的方式。它可以提高程序的运行效率和响应性,同时也需要处理并发访问共享资源的问题。

指令级并行
指令级并行是指在计算机中同时执行多条指令的能力。它通过在处理器中的不同功能单元同时执行多条指令来提高程序的执行效率。
在传统的单核处理器中,指令级并行可以通过流水线来实现。流水线是一种将一条指令的执行过程分成多个阶段(如取指、译码、执行、访存、写回)并将多条指令按照不同阶段依次输入的机制。这样,不同阶段的指令可以同时在流水线的不同阶段进行处理,从而提高指令的执行效率。
另外,现代的处理器通常采用超标量架构,其中包含多个功能单元,可以同时执行多条指令。超标量处理器能够通过指令级并行执行多个指令,提高程序的性能。它可以根据指令间的依赖关系和资源冲突情况,动态地将多条指令调度到可用的功能单元中执行。
指令级并行可以通过多种技术实现,如指令重排序、乱序执行、分支预测等。这些技术可以帮助处理器在保证程序正确性的前提下,尽可能地并行执行指令,提高执行效率。
需要注意的是,指令级并行是在单个处理器内部实现的,并且多条指令之间是彼此独立的。与此不同,多核或多处理器系统中的并行是通过多个处理器或核心同时执行多个线程或进程来实现的。
总结来说,指令级并行是在计算机处理器中同时执行多条指令的能力。它通过流水线和超标量架构等技术来提高程序的执行效率。

单指令、多数据并行:单指令、多数据(Single Instruction, Multiple Data,SIMD)并行是一种并行计算的方式,它是指一条指令同时对多个数据元素执行相同的操作。

虚拟机(Virtual Machine,VM)是一种软件技术,它在实际的硬件平台上模拟出一个虚拟的计算机环境。虚拟机可以运行在宿主机(Host Machine)上,并在其上运行操作系统和应用程序,就像在实际的计算机上一样。

虚拟机的基本原理是通过软件层来实现对硬件的抽象和模拟。它在宿主机上创建了一个虚拟的计算机环境,包括虚拟的处理器、内存、硬盘、网络等硬件设备。在这个虚拟的环境中,可以安装和运行操作系统和应用程序,就像在独立的物理计算机上一样。

虚拟机可以分为两种主要类型:系统虚拟机和进程虚拟机。系统虚拟机可以模拟整个计算机系统,允许在其上安装和运行不同的操作系统。它可以为每个客户操作系统提供独立的虚拟硬件资源,实现多操作系统的同时运行。而进程虚拟机只模拟了操作系统的运行环境,并在其上运行单个应用程序。

虚拟机广泛用于多个领域,包括开发和测试、服务器和数据中心管理、教育和培训等。它们提供了很多优势,如资源隔离、快速部署、硬件利用率的提高、灵活性等。同时,虚拟机也提供了一些高级功能,如快照(Snapshot)、克隆(Clone)、迁移(Migration)等,方便管理和维护虚拟机环境。

常见的虚拟机软件包括VMware、VirtualBox、Microsoft Hyper-V和KVM等。这些软件提供了创建、配置和管理虚拟机的工具和接口,让用户能够方便地部署和运行虚拟机。

总结来说,虚拟机是一种通过软件技术在实际的硬件平台上模拟出一个虚拟的计算机环境的技术。它可以在宿主机上运行操作系统和应用程序,并提供了隔离、快速部署、高效利用硬件等优势。虚拟机被广泛应用于开发和测试、服务器管理、教育和培训等领域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值