什么计算机系统?——计算,存储与通信。

一句话:系统本身就是一个计算+存储系统,该系统为其他软件系统提供共同的抽象概念和运行环境,不同系统之间存在通信关系。

基本组成与三大任务

计算机要完成的三大任务就是存储,计算和通信。基于此目的,我们有磁盘,内存,CPU,网卡等各种各样的底层设备,操作系统将设备抽象为概念之后,三大目的显得更加的“纯粹”:我们所面对的是抽象后的概念。

存储:系统状态本身

状态机的本质就是状态和状态的迁移。谈迁移就必须要有状态本身。有这么一个陷阱问题:计算机的计算和存储两大功能哪个更重要一些?其实答案应该是同样重要,或者存储稍微重要一点,只因为“先有状态,才有迁移”。

持久化的存储都可以看作是状态,比如各种磁盘,还有最近比较火的持久化内存PMem(在数据库领域大放异彩)等。这些掉电不丢失的“存储器”,都是计算的前提和基础。

如果要贯穿整个计算机系统看存储的话,自下而上应该是如此的关系:基于磁盘抽象出本机文件系统,基于本机文件系统可以抽象出分布式文件系统 or 数据库。越往上技术迭代越灵活,但是从本质上看,单机文件系统提供的功能和一个非常强大的分布式数据库没有丝毫不同(当然,可用性差很多,这里仅仅指逻辑上的功能一样)。

计算:系统状态的改变

如果不关注CPU cache和寄存器的存在,CPU就单纯是一个无状态的计算设备,是系统状态的改变者(CPU每时每刻就是取指令、分析指令、执行指令的循环,不断改变着系统的状态),而cache 和 非持久化内存可以看作是计算所产生的中间状态的临时存储空间(因为其是掉电丢失的,和计算的无状态特性更加契合)。

程序本身就是一种重计算过程。你所写的任何函数都是为状态迁移做准备。诚然,一个程序在执行过程中,操作系统要为它维护相当多的内核信息(task_struct …),但是程序主要还是为了“干一件事情”,这件事情就是纯计算,或者改变存储的状态(程序中涉及到IO操作的话)。

通信:一种特殊的计算

通信本身是一种信息的交流,也可以看作是一种特殊的状态变化关系,也即为特殊的计算。但通信在计算机系统中太常见了,因此单独罗列出来。

通信是计算系统的交互。你可以想象在一个合理的分工之下,一个计算系统应该只完成一个主要任务,那么现实中必然有许多事情是要“多任务”协作完成的。那么这些事情如何用计算机编程来映射?答案就是通信。

硬件级别的通信是通过电信号,操作系统级别的通信是各种IPC机制,应用层要么裸用socket对接系统级,要么封装成各种网络库/框架,更加上层的则是同步的RPC和异步的MQ了。

欢迎关注

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 作为程序员,编程必备基础知识非常重要,并且下载CSDN网站上的资源将对我们很有帮助。 首先,计算机基础是程序员必备的基础知识之一。这包括计算机体系结构、计算机网络、操作系统等方面的知识。了解计算机的工作原理,对于编写高效、可靠的程序至关重要。在CSDN网站上,我们可以下载各种教程或书籍,学习这些基础知识。 其次,编程语言是程序员必备的基础知识之一。不同的编程语言适用于不同的应用场景,例如C语言用于系统开发,Python用于数据分析和人工智能等。在CSDN网站上,我们可以下载各种编程语言的学习资料和示例代码,帮助我们快速入门和提高编程能力。 此外,算法和数据结构是程序员必备的基础知识之一。良好的算法和数据结构设计可以提高程序的性能和效率。在CSDN网站上,我们可以下载各种经典算法和数据结构的实现代码,学习它们的原理和应用,提升我们的算法和编程能力。 最后,软件工程和项目管理是程序员必备的基础知识之一。了解软件开发过程、版本控制、测试和质量保证等方面的知识,可以提高我们的团队协作和项目管理能力。在CSDN网站上,我们可以下载各种软件工程和项目管理的书籍和工具,帮助我们学习和应用这些知识。 总而言之,计算机基础、编程语言、算法和数据结构、软件工程和项目管理是程序员必备的基础知识。在CSDN网站上,我们可以下载各种教程、书籍、示例代码和工具,帮助我们学习和提高这些知识和能力。 ### 回答2: 编程必备基础知识对于程序员来说非常重要,它们是构建程序和解决问题的基础。而在download.csdn.net网站上,你可以找到关于计算机基础的许多资源。 首先,计算机基础包括计算机硬件和操作系统的知识。硬件包括中央处理器(CPU)、存储器、输入输出设备等组成部分。了解硬件的工作原理和性能可以帮助程序员优化程序并充分利用计算资源。同时,操作系统计算机运行程序的核心,学习操作系统的概念和功能可以帮助程序员理解程序与硬件之间的交互过程。 其次,数据结构和算法是编程中必不可少的基础知识。数据结构涉及如何组织和存储数据,例如数组、链表、栈、队列和树等。而算法则是解决问题的步骤和策略,包括排序、搜索、递归、动态规划等。在download.csdn.net网站上,你可以找到许多关于数据结构和算法的教程和示例代码,帮助你提升编程技巧和解决问题的能力。 另外,编程语言也是程序员必备的基础知识之一。不同的编程语言有各自的语法和特点,了解它们可以帮助你选择适合的语言来解决问题。在download.csdn.net网站上,你可以找到各种编程语言的学习资料和代码示例,例如C++、Java、Python等。 最后,计算机网络和数据库也是程序员需要了解的基础知识。计算机网络涉及如何在不同计算机之间传输数据和通信。而数据库则涉及如何组织和管理数据,例如关系型数据库和非关系型数据库。在download.csdn.net网站上,你可以找到关于计算机网络和数据库的教程和工具,帮助你深入了解这些概念和技术。 总而言之,在download.csdn.net网站上,你可以找到丰富的计算机基础知识的学习资源。掌握这些知识可以帮助你成为一名更优秀的程序员,更好地构建程序并解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DataPlayerK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值