计算机操作系统,组成原理等基础课联系与区别
计算机基础课程联系与区别定义:操作系统组成原理联系与指导:(一)(二)(三)(四)附图:引言:本文系各位大佬系统总结,因此也不是出自一处,因为本人在初学时一直搞不清楚他们的区别,头脑总是混乱的听讲,因此效果不是很佳。所以总结本文,来让自己有个全面系统的认识,同时也学到了很多。定义:操作系统操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管...
引言:
本文系各位大佬系统总结,因此也不是出自一处,因为本人在初学时一直搞不清楚他们的区别,头脑总是混乱的听讲,因此效果不是很佳。所以总结本文,来让自己有个全面系统的认识,同时也学到了很多。
定义:
操作系统
操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。
在计算机中,操作系统是其最基本也是最为重要的基础性系统软件。从计算机用户的角度来说,计算机操作系统体现在其提供的各项服务;从程序员的角度来说,其主要是指用户登录的界面或者接口;如果从设计人员的角度来说,就是指各式各样模块和单元之间的联系。事实上,全新操作系统的设计和改良的关键工作就是对体系结构的设计,经过几十年以来的发展,计算机操作系统已经由一开始的简单控制循环体发展成为较为复杂的分布式操作系统,再加上计算机用户需求的愈发多样化,计算机操作系统已经成为既复杂而又庞大的计算机软件系统之一。
组成原理
计算机组成原理在各个计算机应用中都有应用,大学中也有不少大学开设,使用的教科书也有些差别, 但是都讲述了相近的知识。
计算机简史
冯 诺依曼计算机组成及相关思想
总线相关知识
存储器相关知识
处理器相关知识
数据计算,原反补移码
指令
IO操作
联系与指导:
(一)
首先最基础的是计算机组成原理,如果想深入学习计算机的话这个是必不可少的,涉及到的知识属于比较硬的知识,要求你对计算机处理问题或者运行的情况进行理解,弄明白计算机在执行任务的时候最底层的方式。
然后是计算机网络,弄清了单个计算机工作的原理之后,必然是研究一群计算机如何一起工作和联系,计算机网络讲述的就是计算机如何与计算机进行了联系,联系的时候如何传输信息,传输信息的过程中又要注意哪些问题等等。
其次是操作系统,弄清了物理上,计算机如何工作,计算机之间如何联系,就该学习计算机如何与人进行交互了,其实上面两门课讲得都还是机器层面的问题,对于机器和人的关系就是由操作系统来完成的,操作系统主要是告诉你,机器在完成各种任务的时候,如何实现机器层面的信息向交互层面转换,也就是如何把计算机的功能等等更明白的告诉人,这样人才能更好地利用计算机。
最后是数据结构吧,其实数据机构上面应该还有编程语言和算法,编程语言就是在有操作系统之后,人们应该如何跟操作系统对话,而数据机构和算法则是在你学会编程语言之后学习的两门课程,这两门课程能够帮助你更好的更有效率的完成编程的任务。
我上面讲述的其实是从硬件也就是从底层到软件也就是到高层的顺序讲的,只有弄清了底层的原理,才能让你在学习高层知识的时候不那么迷惑。
(二)
操作系统,这门课你可千万不要觉得,“我又不需要写一个Linux,写一个windows所以我就不需要学习”。这门课不是叫你写一个操作系统的,讲的是资源的调度和分配,以及大型软件的设计。稍微写过一些并行并行的程序,都能体会到这门课的重要性。
计算机网络,是不是觉得现在网络应用框架这么多,socket不用手写,物理层和链路层就更加不用理了是吧。最近尝试把一个网络应用部署到云服务器上,网络没问题,端口全开,云主机上localhost可访问,但从公网死活访问不了,至于原因就等题主你学习计算机网络的时候来思考一下吧。
计算机组成原理,你还真不需要理解cpu的每一个电路怎么运行,但当我懂得内存与外存的区别,以及缓冲区这些概念时,代码的书写思维和我入门时真的有很大不同。
所有的语言,框架说白了就是在某种规则(语法规则,API)上进行利用(编写代码),而一旦遇上瓶颈,或者某些bug的定位,需要为某种环境而进行方案的选择折衷(比如存储空间),这个时候就是你说的那些基础知识辅助决策的时候了。
(三)
一句话概括:计算机体系结构讲的是计算机有哪些功能(包括指令集、数据类型、存储器寻址技术、I/O机理等等),是抽象的;计算机组成原理讲的是计算机功能是如何实现的,是具体的。
例如:一台机器是否具备乘法指令的功能,这是一个结构问题,实现这个乘法采用什么方式,则是一个组成问题。实现乘法指令可以采用一个专门的乘法电路,也可以采用连续相加的加法电路来实现,这两者的区别。
组成原理是让你从整体上精略地让你了解计算机是怎么工作的,内容上侧重于计算机的几大组成(运算器,控制器,存储器,输入设备,输出设备与总线结构),具体来说,是具体一条指令在cpu中是如何执行的,计算机的储存体系是如何的(分三层),还有就是一是I/O接口的基本概念。 之后学的就是体系结构和微机原理,都是以组成为知识背景的。
体系结构可以认为是对《计算机组成》的抽象化与进一步的理论化,里面计的技术包罗万象,包括大型机和微机中所应用的技术。主要内容是学习指令的流水技术,动态调度,静态调度。你学懂了后会觉得cpu一点也不神奇了。
微机原理是是对《计算机组成》的具体实现。一般会选x86计算机来说,这时一般不会再详细讲工作原理了(因为大多数原理都在《计算机组成》中讲了),而是直接讲述cpu的具本结构是什么,具体引脚的作用,各种总线多少多少,各种控制寄存器的各个位有什么意义,I/O的具体交接口(ISA,pci)……因为是具体的东西,所以有好多东东要记的。
总体来说,最有趣的是组成,最难学的是体系结构,最多东西记最有亲切感的是微机原理。作为一名计算机系的学生,这几门课都应好好学一学,他是本科阶段侧重于理论学习的的突出体现,可以让人深入而深切地认识计算机。
(四)
万丈高楼平地起,计算机系统就像程序员金字塔的地基。理解了计算机系统的构造原理,在写程序的道路上才能越走越远。至于原因如下:
-
经常用一些不知其所以然的技术,会感到不安。因为源码的实现往往涉及到多方面的的知识,比如设计模式,比如JDK的一些高级特性等等。
-
在这个数据爆炸的年代,很多系统对于项目性能的优化有很高的要求。那么如何调优成为了程序员不可避免的问题,我们知道 Java 是运行在 JVM 上的,程序的调优那就需要对 JVM 有一定的了解。
-
再就是如果你对计算机系统的构造不太了解,可能你平时写的程序都是错误的。比如我们一直以为两个正数的和或者积一定为正,但是用二进制补码表示的正数和或者积却不一定;程序员和编译器不能用(x-y<0)来代替(x<y),因为前者会产生溢出。甚至也不能用表达式(-y<-x)来代替,因为在二进制补码表示中负数和正数的范围是不一致的。算术溢出是造成程序错误和安全漏洞的一个常见根源。
-
第四个原因,这个也是最直接的原因。不知道大家是否了解大的互联网公司面试,比如阿里巴巴,腾讯这样的公司。他们面试对于基础的东西要求的很严格,你对这些东西的了解程度将直接决定你的面试成败。
比如:讲一下JVM的结构,TCP/IP的三次握手、四次挥手,淘宝用户的数据怎么满足高并发?等等。像这些问题,如果我们不懂计算机底层知识肯定是不能过关的。 -
树立正确的计算机世界观
培养一种心态,即计算机的一切是可以理解的,没有超出人类的智慧。即使有些问题你现阶段没有明白,但这些问题都是可以理解的,只是你时间不够,所以先放一下,等有时间再学习它们。这种心态可以防止你滑入无助的陷阱。 有时候你的潜意识会愚弄你,把很难做成的事情当成无法做成的事情。就像《肖申克的救赎》中表现的那样,一把很小的锤子也是可以砸开监狱的墙壁逃出来的。而Red第一次看到那个锤子时,他就认定了Andy肯定逃不出来了。而实际上Andy却用19年的时间确实把墙给凿开了,虽然其间各种艰辛,但是结局却很美好。
我们是程序员,不是造计算机的,我们也不需要对计算机的每一个部件都了解,我们只需要了解我们所写的程序在系统中的执行过程,以及计算机系统的构造对我们的程序代码有什么限制,有什么影响即可。
好了,说了这么多,其实是想告诉大家,做一只咸鱼很简单。但是要做一只有梦想的咸鱼。如果有同样想法的人,又一直下不定决心去学习的人,我们可以一起,互相监督,互相学习交流。
附图:
计算机组成原理结构图
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)