原文地址:
原文个人主页:计算机组成原理、操作系统、数据结构和计算机网络融会贯通

计算机组成原理

这门学科告诉你什么是计算机。

首先,我们可以把计算机分解成最原始的部件——晶体管。晶体管是一种半导体材料,其最重要的作用就是半导:可以通过电流的变化,实现电路的切换。比如计算机最基础的与或非运算,都可以通过晶体管组成的电子元件实现。而通过晶体管的电位差不同,就可以体现"二进制数据",即0和1。再加上电容和电阻,就能把这种二进制数据临时保存起来。

综合这些特性,大牛们发现把晶体管用作精密的数学计算,可以极大的提高运算的效率。比如我有2个电容,分别是充满电和没有电,对他们同时释放电信号,电容就会把其中的电子放出来,经过特定的逻辑电路,如与门,得到了0的结果。要计算1+1,实际上也是类似的原理。我先设计一个加法电路,把若干电容组合成的"数字"流过这个电路,把结果存入目标电容,就得到了结果。大规模的复杂运算以此类推。

最早期的计算机真的就是用许多结晶体管实现的复杂电路结构,通过控制输入电流得到希望的输出结果。后来人们发现,这种计算可以用某些形式抽象成多种指令,不用针对每次计算设计复杂的电路,只要调用指令就可以实现任何一种计算组合,于是诞生了cpu。只有cpu,每次都要自己配置输入信号,实在太痛苦,就做了纸带输入给计算机。后来又发现纸带还是很麻烦,于是发明了输入终端和对应的存储设备。后来又发现很多数据要临时保存起来,供连续计算使用,于是发明了内存。再后来pc的发展经历了无数次的变革,让计算机一步步到了今天的地步,也就是你现在看到的这样。

其中的历程非常曲折,也许有机构能够把他们全部组织成一本漫长的历史,但个人肯定是无能为力的。

操作系统

综上所述,计算机发展到一定程度,什么东西都靠人工也未免太累了。比如:

通过输入设备组织指令给cpu去计算,你希望能够找一个快速的输入设备(比如键盘)
在能看到结果的地方输入(比如屏幕)
然后再用很方便的方式提交给cpu(比如按键或者指令)
让cpu去算好了,再把结果展示出来(比如屏幕)

理想很美好,但是这么复杂的流程,人工管理起来不还是很麻烦吗?除非我构造一个设备,把这些所有设备都管理起来,于是主板就诞生了。

现在主板解决了我们大量的问题,但是我发觉我的需求还远远不够!

我希望我写过的程序能在任何一台机上运行。
我希望我能边听音乐边干活——即同一时间可以运行多个程序。
我希望别人写的傻×东西不要影响到我的工作——即多任务控制。
我希望计算机里面的各种资源都能得到良好的组织,更快的访问。
我希望我的用户界面更好看,使用更方便,功能更强大!我是个小白用户,啥都不懂,别跟我扯这些有的没的,我就像随便操作两下就能达到我想要的!

如果这些需求全部都做在主板bios里面,那将是一场灾难!除非bios经过极大的调整和改动,划分出一大块区域存放操作系统,并且完成复杂的体系结构改革。计算机发展到这种程度,早就已经有很多的机构和厂商介入其中,试图从中渔利。他们当然不会求着计算机标准委员会和主板生产厂商去做所谓的主板改革,而是编写自己的程序——操作系统,来解决这些所有的问题。

而操作系统问世之后,

  • 一方面接管了主板对于系统资源的管理,加入了自己的中间层——驱动程序
  • 另一方面又充分发挥了人机交互的接口——gui界面,成为了计算机必不可少的组成部分

操作系统通过bios引导,即作为应用程序开始运行。我们知道程序的本质上就是在cpu上运行种种指令,比如操作系统需要把硬盘上的模块放入内存,实际上就是运行了一系列复杂的cpu指令

  1. cpu指令通过主板bus(实际上就是传递指令的电路)发送指令给硬盘(比如从哪个扇区偏移多少读多少数据)
  2. 硬盘再通过芯片组转动磁头,把数据读到缓存中,完成后给cpu发送一个信号(即中断)
  3. cpu收到这个信号,就在寄存器中寻址该信号对应的地址(即我们说的中断向量表),运行该地址中的指令
  4. 发现该指令是发送拷贝指令给主板芯片组,主板就会在cpu的指导下不断的发送信号,告诉硬盘缓存放电,再把接收的电信号存到指定的内存位置去
  5. 如此反复,直到完成cpu的一系列指令为止。

操作系统说白了,就是这样通过种种cpu指令,实现自身的所有功能。当然这些指令也不是一条条写进去的,而是通过编程语言完成人类较容易识别的逻辑,然后再通过编译器把这些逻辑翻译成cpu指令,这就涉及编译原理的东西了。

既然操作系统对硬件的访问都是通过cpu指令来完成的,那为什么大家都感觉是操作掌管了硬件呢?这就涉及操作系统最本质的功能之一:对系统资源的管控了。

我们运行的所有程序,实际上都是操作系统帮我们运行的。操作系统背后进行了很多的工作,如

  • 虚拟地址空间的分配
  • cpu分时调度
  • 硬件中断信号的响应等

这样对于硬件资源的访问,也是通过操作系统安排的。比如操作系统会通过把短时间内硬盘读写合并成顺序的方式,以提高磁头的利用率,降低磁头转向的时间。再比如对内存地址的访问也是由操作系统管控的,某个程序中的内存地址具体落到内存条的哪个位置,还是硬盘中的虚拟内存,就看操作系统的心情了。

至此,操作系统和硬件的交互也介绍的差不多了,更详细的东西建议参考操作系统相关的书籍吧,比如

  • 《深入理解计算机系统》
  • 《linux内核设计与实现》
  • 《unix环境高级编程》之类的

数据结构

数据结构的作用,就是为了提高硬件利用率。比如操作系统需要查找用户应用程序"office"在硬盘的哪个位置,盲目的搜索一遍硬盘肯定是低效的,这时候搞个b+树作为索引,搜索office这个单词就很快,然后就能很快的定位office这个应用程序的文件信息,再找到文件信息中对应的磁盘位置了。

数据结构可以看看这些

  • 《算法导论》
  • 《数据结构与算法分析》之类的

计算机网络

计算机网络分为3块:

1. 硬件

网卡,网线,交换机这些,用来处理数据的。

2. 协议

数据在网络中通信如何组织?如何识别?如何保证数据的正确性?这2块我就不多说了。

3. 操作系统

这就是如何把计算机网络和操作系统结合起来的问题了。

对于操作系统来说,网卡也是一种硬件资源。但是网络不单只是一种硬件,而是一种媒体入口。比如操作系统管理硬盘,当然不是简单的记一下硬盘有多大,然后一切操作都交给硬盘芯片去做,更多的需要组织硬盘的扇区,分区,记录文件和扇区/偏移的关系等等。

操作系统对于网络来说也是如此,要记录自身在网络的标识(ip),可被他人访问的入口(port),以及对方的信息(remote ip/port)。连接,断开,数据确认等操作也是由协议控制。

传递自身消息给对方,类似访问硬盘一样把内存中的数据传递给网卡缓存,再发消息给网卡让网卡去传数据,而是否发送成功这些保证不再由硬件中断信号反馈,而是通过网络协议完成。接收对方消息,也是接收到网卡中断,再把数据从网卡缓存移动到内存中,再通过协议给予对方反馈。

简单来说就是这样,网络方面的书籍就推荐:

  • 《tcp/ip详解》
  • 《uinx网络高级编程》

本文内容来自与知乎大牛问答:
作者:Raynor
链接:https://www.zhihu.com/question/22017267/answer/26468016

计算机组成原理、操作系统、数据结构和计算机网络融会贯通相关推荐

  1. 如何把计算机组成原理、操作系统、数据结构和计算机网络融会贯通,相互联系起来?

    如何把计算机组成原理.操作系统.数据结构和计算机网络融会贯通,相互联系起来? 何为融会贯通? 知识的融会贯通的唯一核心衡量指标是,遇到没有遇见过的问题却能用处理过的经验去解决问题. 工业计算发展史 现 ...

  2. 计算机考研王道408【数据结构/计算机组成原理/操作系统/计算机网络】知识点总结(PDF版)

    数据结构/计算机组成原理/操作系统/计算机网络 食用指南 我想说的 内容展示 食用指南 这些资料是我2021年上岸时所总结的,主要分为2部分. 第一部分是文件结尾带全书考点的,是我参考王道当年的视频P ...

  3. 北科计算机网络真题,北京科技大学计算机组成原理和数据结构历年试题及笔记...

    [实例简介]北京科技大学计算机组成原理和数据结构历年试题及笔记 [实例截图] [核心代码] 北京科技大学1999年数据结构考研试题及答案.rar 北京科技大学1999年计算机组成原理考研试题及答案.r ...

  4. 832计算机组成原理和数据结构,考试科目832计算机组成原理和数据结构.doc

    考试科目:832计算机组成原理与数据结构 一.复习要求: 该考试科目涵盖计算机组成原理和数据结构等学科专业的基础课程.要求考生比较系统地掌握上述专业基础课程的基本概念.基本原理和基本方法,能够综合运用 ...

  5. 832计算机专业基础,2019年考试科目832计算机组成原理与数据结构.doc

    考试科目:832计算机组成原理与数据结构 一.复习要求: 该考试科目涵盖计算机组成原理和数据结构等学科专业的基础课程.要求考生比较系统地掌握上述专业基础课程的基本概念.基本原理和基本方法,能够综合运用 ...

  6. 【考研】考研经验及教训分享(强烈推荐计算机专业且专业课有计算机组成原理或数据结构的看进来)

    受同学所托,分享一下自己考研的经验和教训,希望能带给大家一些帮助. 如果你也想分享一下你的考研经历或故事,期待你的评论: https://blog.csdn.net/shuiyixin/article ...

  7. 北京科技大学871计算机真题,(NEW)北京科技大学871计算机综合一(含计算机组成原理、数据结构)历年考研真题汇编(350页)-原创力文档...

    500所高校考研专业课历年真题含答案科目齐全复习必备 目 录 871计算机综合一 (含计算机组成原理.数据结构)考试大纲及参考书 1998年北京科技大学数据结构考研真题及答案 1999年北京科技大学计 ...

  8. 832计算机组成原理和数据结构,832计算机组成原理与数据结构(计算机新增考试大纲)...

    <832计算机组成原理与数据结构(计算机新增考试大纲)>由会员分享,可在线阅读,更多相关<832计算机组成原理与数据结构(计算机新增考试大纲)(5页珍藏版)>请在人人文库网上搜 ...

  9. 研究生院考计算机组成原理,2017年哈尔滨工业大学深圳研究生院854计算机基础(含数据结构、计算机组成原理)之数据结构考研题库...

    一.选择题 1. 下列关于闪存(FlashMemory )的叙述中,错误的是( ). A. 信息可读可写,并且读.写速度一样快 B. 存储元由MOS 管组成,是一种半导体存储器 C. 掉电后信息不丢失 ...

最新文章

  1. Windows Server 2003 AD升级到Windows Server 2008 AD的方法及详细步骤
  2. 为什么python会火?看到这个几个与众不同的地方你就懂了!
  3. 在php的yii2框架中整合hbase库
  4. 确定一组矩形是否有两个重叠的算法
  5. win11频繁更新,关闭win11恶意软件删除工具补丁更新
  6. YBTOJ:采矿战略(线段树维护dp、树链剖分)
  7. 漫步数理统计五——条件概率与独立(上)
  8. 苹果输了,赔了高通 2 个亿
  9. java使用xsd校验xml样例
  10. PX4 vision_to_mavros定位
  11. 设计模式笔记6:工厂方法模式
  12. ALtera DE2开发板学习04
  13. 手机弹奏计算机音乐的软件,APP推荐:11款简单好用工具的APP,一定要懂!
  14. 网站地图(sitemap)在线生成
  15. 偏微分方程的数值解(二): 一维状态空间的偏微分方程的 MATLAB 解法
  16. 牛客网笔试输入输出的一堆坑。。(Python)
  17. windows系统更新失败无法启动的解决方法
  18. 知识图谱从入门到应用——知识图谱推理:基础知识
  19. 智能制造案例——面向重型机械车间智能制造系统解决方案
  20. w7计算机删除图标不见了怎么办,win7小电脑图标不见了怎么办

热门文章

  1. CocoaPods深入一点
  2. DISALLOW_COPY_AND_ASSIGN DISALLOW_IMPLICIT_CONSTRUCTORS.
  3. 加速信创落地,最新国产身份目录服务首发
  4. ardupilot 中关键坐标系
  5. 数据增强方式mosaic(基于yolo4)代码实现python
  6. linux搭建声纹识别,声纹识别SDK-FreeSR
  7. Win10更新系统,VirtualBox与win10不兼容处理办法
  8. 一个人不自信有多可怕?
  9. tensorflow conv2d()参数解析
  10. Python 程序员需要知道的 30 个技巧(转载)