一般我们讲计算机,指的是民用的计算机,范畴就是台式电脑或笔记本电脑。其实更广义的计算机概念,种类更多,比如负责大量运行的超级计算机,这类大型主机一般拥有高性能的并发处理系统;小型机具有一定的数据处理能力,常见的云服务器就是小型主机,而微型主机才指的办公室或家用的计算机,即台式机或笔记本。其实像现在的手机或平板,也是计算机,在这里我们主要讨论微型计算机。
不管是在家里,学校或公司,我们对于台式计算机早已习以为常。而且,从外观上看,它有显示器,鼠标,键盘,音箱,打印机,扫描仪,主机等构成。如果我们曾学过计算机硬件的组成,那么,我们会认为这些看得见的硬件,就构成了一台计算机。
其实不然。因为在那台主机里面,还有许多硬件,把这些全部加起来,才算上是计算机的硬件组成。下面我们就一一列举计算机有哪些硬件。
一、显示器
显示器又称监视器,是计算机最基本的输出设备之一,其作用是用于显示文字和图表等各种信息。
二、打印机
打印机(Printer)是计算机的输出设备之一,用于将计算机处理结果打印在相关介质上。比如我们做好的Word文档或Excel表格,就可以打印到一张A4纸上。
三、音响
音箱指可将音频信号变换为声音的一种设备。通俗地讲,就是指音箱主机箱体或低音炮箱体内自带功率放大器,对音频信号进行放大处理后由音箱本身回放出声音,使其声音变大。
上面三种类型的硬件,其实本质上都具有相同点,那就是把计算机处理好的数据通过一定的形式输出来,像这类的设备,我们统称为输出设备。
输出设备是对将外部世界信息发送给计算机的设备和将处理结果返回给外部世界的设备的总称。它的功能是将内存中计算机处理后的信息以能为人或其它设备所接收的形式输出。
四、鼠标
一种外接输入设备,也是计算机显示系统纵横坐标定位的指示器,因形似老鼠而得名。鼠标的使用是为了使计算机的操作更加简便快捷,来代替键盘那繁琐的指令。鼠标又分为有线鼠标和无线鼠标。
五、键盘
键盘是用于操作计算机设备运行的一种指令和数据输入装置,通过键盘可以将英文字母、汉字、数字、标点符号等输入到计算机中,从而向计算机发出命令、输入数据等。还有一些带有各种快捷键的键盘。
六、扫描仪
它的功能与打印机相反,它可将影像转换为计算机可以显示、编辑、存储和输出的数字格式,是功能很强的一种输入设备。
像鼠标、键盘和扫描仪这类往计算机里面输入数据的设备,我们统称为输入设备。
输入设备:向计算机输入数据和信息的设备。是计算机与用户或其他设备通信的桥梁。输入设备是用户和计算机系统之间进行信息交换的主要装置之一。键盘,鼠标,摄像头,扫描仪,光笔,手写输入板,游戏杆,语音输入装置等都属于输入设备。输入设备(InputDevice)是人或外部与计算机进行交互的一种装置,用于把原始数据和处理这些数的程序输入到计算机中。计算机能够接收各种各样的数据,既可以是数值型的数据,也可以是各种非数值型的数据,如图形、图像、声音等都可以通过不同类型的输入设备输入到计算机中,进行存储、处理和输出。
除了这些硬件,计算机还有一个强大的主机,而这台主机,我们又可以进一步折分其中的硬件,下面是主机的硬件构成。
七、中央处理器
中央处理器(Central Processing Unit,简称CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。
八、内存
内存(Memory)是计算机的重要部件,也称内存储器和主存储器,它用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。只要计算机开始运行,操作系统就会把需要运算的数据从内存调到CPU中进行运算,当运算完成,CPU将结果传送出来。
九、硬盘
硬盘是计算机最主要的存储设备。用得永久存储内存中的数据,就算关机掉电,硬盘上的数据也不会消失。现在主流分为机械硬盘和固态硬态。
十、主板
主板是计算机连接各个硬件的载体。主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有BIOS芯片、I/O控制芯片、键盘和面板控制开关接口、指示灯插接件、扩充插槽、主板及插卡的直流电源供电接插件等元件。
十一、显卡
显卡主要由显示芯片、显存、数模转换器、主板的接口等几部分组成。显卡是连接显示器和个人计算机主板的重要组件,是“人机对话”的中间桥梁。
十二、声卡
声卡是计算机多媒体系统中最基本的组成部分,是实现声波/数字信号相互转换的一种硬件。声卡的基本功能是把来自话筒、磁带、光盘的原始声音信号加以转换,输出到耳机、扬声器、扩音机、录音机等声响设备,或通过音乐设备数字接口(MIDI)发出合成乐器的声音。
十三、电源
电源是将其它形式的能转换成电能并向电路(电子设备)提供电能的装置。电源的作用是给主机里面的硬件供电。比如主板。
OK,上面这些便是一台计算机的硬件组成。
——重庆教主 2023年11月29日
冯诺依曼于1903年12月28日出生于匈牙利布达佩斯,二战后开始从事流体力学、计算机学等方面的研究,对世界上第一台电子计算机ENIAC(电子数字积分计算机)的设计提出过建议,1945年3月他在共同讨论的基础上起草了一个全新的“存储程序通用电子计算机方案”--EDVAC(Electronic Discrete Variable Automatic Computer的缩写)。这对后来计算机的设计有决定性的影响,特别是确定计算机的结构,采用存储程序以及二进制编码等,一直为电子计算机设计者所遵循。
在计算机领域,他提出一种结构,将程序指令存储器和数据存储器合并在一起,程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。
另外,他还提出二进制逻辑,即采用二进制作为计算机数值计算的基础,以0、1代表数值。不采用人类常用的十进制计数方法,二进制使得计算机容易实现数值的计算。
最后,他认为计算机由五大部分组成,分别是运算器、控制器、存储器、输入设备、输出设备。
当然,这不是他一个人的功劳,在他的身后,还有许许多多的计算机科学家的努力。比如,他的这套结构也遵循了图灵机的设计。
一、冯•诺依曼模型
计算机系统具体定义为五个部分,分别是运算器,控制器,存储器,输入设备,输出设备;其中运算器与控制器并称为中央处理器(CPU),存储器也就是我们常说的内存,常见的输出设备有键盘,鼠标,网卡,硬盘等;常见的输出设备有显示器,音响,硬盘等;
内存与外存的区别
内存从外观上区别就是内存条,外存就是诸如硬盘、U盘、光盘、软件等设备。从内部组成结构而言,内存与CPU关系最密切,他们俩是亲密无间的战友,CPU只处理内存上的数据,如果用户希望保存内存中被处理好的数据,那就只能保存在外存上,因为外存在关机后数据还在,而内存上的数据在关机后就消失了。
我们用一张图来说明计算机系统的五个部分,那么,它应该是下面这个样子。
这种结构的主要优点:
- 以运算单元为中心
- 采用存储程序原理
- 存储器是按地址访问,线性编址的空间
- 控制流由指令流产生
- 指令由操作码和地址码组成
- 数据以二进制编码
二、内存的重要性
计算机被发明出来,作为人类的一个工具,最重要的能力就是数据计算。按照上面的结构,人们在使用计算机的过程中,它的流程应该是这样子的。
比如说我们要处理一张照片,由扫描仪将真实世界中的照片扫描成计算机数据,交给CPU进行处理,然后输出到硬盘上。这个流程是没有问题的,但是,由于CPU的处理速度实在过快,而扫描仪扫描数据然后输入到计算机的速度又太慢,导致CPU接上不趟,这将大大削弱计算机的计算性能。怎么办?于是,内存就被发明出来。
内存的读写速度很快,快过世界上所有的存储器。于是,我们可以先将输入设备的数据存放到内存上,然后CPU读写内存上的数据进行处理,待数据处理好后,再保存到外存(比如硬盘)上,这样就将CPU的运算性能发挥到了极致。所以,它们之间的相互配合的流程应该是下面这个样子的。
从此,输入设备和输出设备便不再和CPU直接打交道了,在输入设备、CPU和输出设备之间,就多了一个内存做为数据缓冲区,通常情况下,内存的速度与CPU的速度是匹配的,它们之间的配合非常贴切。
在解了冯诺依曼体系后,对于立志要做一名程序员的我们而言,还需要进一步了解CPU和内存。下一节,我们将介绍CPU的工作原理。这对于后期学习编程和调试代码是十分有帮助的。
——重庆教主 2023年11月30日
CPU的全称叫Central Processing Unit,即中央处理器。它由运算器、控制器和寄存器三个部分组成。它是计算机系统中最重要的部件,承担运算和控制的功能,好比人的大脑。所以,CPU就是计算机的大脑。它是信息处理、程序运行的最终执行单元,其功能主要是解释计算机指令以及处理计算机软件中的数据。它的性能主要体现在其运行程序的速度上。
1、运算器:运算器是计算机中执行各种算术和逻辑运算操作的部件,它的基本功能是完成对各种数据的加工处理,例如算术四则运算,与、或、求反等逻辑运算,算术和逻辑移位操作,比较数值等。
2、控制器:控制器是指挥计算机的各个部件按照指令的功能要求协调工作的部件,它的功能是根据指令操作码和时序信号,产生各种操作控制信号,以便正确地建立数据通路,从而完成取指令和执行指令的控制。
3、寄存器组:寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一、它一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。
哪些部件与它协同工作?
从图上可以看到,CPU本质上和内存、外存、输入输出设备都建立了关联。但是实际上,他们中间还存在一块电脑主板,CPU,内存,外存,输入设备,输出设备都是挂载在这块主板上的,而CPU则通过不同的总线与它们建立联系。
什么是计算机总线?
总线是连接计算机各功能部件的逻辑电路和连线,包括管理信息传输规则的电路被称为总线。它是计算机各部件之间传输信息的公共通路,总线的硬件组成选用集电极开路输出电路,实现把多路输入的某一路信息送到总线上。通俗的讲,总线就是一种内部结构,它是cpu、内存、输入、输出设备传递信息的公用通道。
计算机有哪些总线?
按功能来分,一般有数据总线、地址总线、控制总线、局部总线和扩展总线。
1. 数据总线(Data Bus):数据总线负责在CPU、内存、输入/输出设备之间传输数据。它是一个宽总线,可以同时传输多个数据项。
2. 地址总线(Address Bus):地址总线是用来传递存储器地址的,它决定了CPU可以从哪个位置读取或写入数据。由于现代计算机系统通常使用较小的内存单元(如32位或64位),因此地址总线也相应地变窄,以便在内存中寻址更小的区域。
3. 控制总线(Control Bus):控制总线负责传递CPU发出的控制信号,如读取、写入、执行等命令,以协调各个组件之间的操作。控制总线还包含用于管理数据传输的时序信号。每种类型的总线都有其特定的功能和用途。
CPU是如何工作的?
CPU的运作原理可分为四个阶段: 提取(Fetch)、解码(Decode)、执行(Execute)和写回(Writeback)。CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码,并执行指令。
1、取指令:CPU的控制器从内存读取一条指令并放入指令寄存器;
2、指令译码:指令寄存器中的指令经过译码,决定该指令应进行何种操作、操作数在哪里;
3、执行指令:以一定格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的暂存器,以供随后指令快速存取;
4、修改指令:修改指令计数器,决定下一条指令的地址。
什么是指令?
指令是由一个字节或者多个字节组成(对于arm64,大部分指令长度是4个字节),其中包括操作码字段、一个或多个有关操作数地址的字段,一些表征机器状态的状态字,以及特征码。有的指令中也直接包含操作数本身,且用二进制序列表示。指令的构造如下:
所以,CPU只能识别二进制,那么什么是二进制呢?我们下一节将介绍二进制内容。
——重庆教主 2023年11月30日
一、二进制的起源
二进制(Binary)是由德国数学家和哲学家莱布尼茨首先提出来的。二进制是一种记数系统,只使用0和1两个数字来表示数,逢二进一。二进制在计算机科学、电子工程、数学等领域中得到了广泛的应用,因为可以很方便地表示和处理数字、图像、音频和视频等信息。当然,最重要的一个原因是计算机也只能识别两种物理状态,即开和关,通和断等。
在我们生活当中,最常用的属十进制,逢十进一。当然,还存在着别的进制,比如7进制,典型代表是星期;十二进制,比如月份,60进制,比如钟表的分钟数和秒数;24进制,比如小时。
什么情况下1=12?1年=12月,什么情况下1.5=90?1.5小时=90分钟。为什么这些等式能够成立?这是因为等式的左边和右边采用了不同的进制,而他们之前存在一定的转换关系。
比如我们直接说1=12,那是绝对不可能的,因为在生活中默认等式两边都是十进制,那1只能等于1,12只能等于12,只有1年才会等于12月。很显然,“年”这种数据就是12进制,因为逢12进1。
二、计算机为什么采用二进制?
电子计算机出现以后,使用电子管来表示十种状态过于复杂,所以所有的电子计算机中只有两种基本的状态,开和关。也就是说,电子管的两种状态决定了以电子管为基础的电子计算机采用二进制来表示数字和数据。我们将一种状态表示为0,另一种状态表示为1,所以,计算机只能识别0或1构成的数据。
另外,二进位计数制的四则运算规则十分简单。而且四则运算最后都可归结为加法运算和移位,这样,电子计算机中的运算器线路也变得十分简单了。而且,在电子计算机中采用二进制表示数可以节省设备。由于二进制中只用二个符号 “ 0” 和“1”,因而可用布尔代数来分析和综合机器中的逻辑线路。
最后,二进制的符号“1”和“0”恰好与逻辑运算中的“对”(true)与“错”(false)对应,便于计算机进行逻辑运算。
三、对二进制数的感性认识
二进制 | 十进制 |
0 | 0 |
1 | 1 |
10 | 2 |
11 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | 10 |
在上面的表中,我们分别从0-10写出了二进制和十进制的数字。先分析右边的十进制,什么是十进制?两个重要信息:第一是有10个阿拉伯数字来表示某一位,第二是逢十进1,所以我们可以看到右侧的内容从0-9都只有一位,直到9+1=10,这个就出现进位的状态,从而变成2位数字。
再观察左侧的二进制,由于二进制只有两个数字0和1表示,且逢二进一。我们可以看到在第三行,即1+1时,结果变成了10,也就是向高位进一。此时的10实际上等于十进制中的2。以此类推,我们起码可以感知到二进制是如何进位的。
读者可以反复的将这张表写几遍,从中找到二进制的进位规则。当你豁然开朗时,那么接下来的二进制与十进制的互换转换,在你脑海中会才映下几个字:嗯,它们之间本来就是这样子转换的!
四、对二进制的理性认识
对于程序员而言,进制转换是必须要掌握的,虽然在高级语言中,我们通常定义和使用的数据类型,不管是小数还是整数,都是十进制的,但是涉及到较底层的开发,或者串口和网口的通讯开发,我们免不了要直接处理二进制、八进制、十六进制数据,这就面临它们与十进制数据的转换。接下来,我们以两个示例来说明二进制转十进制和十进制转二进制的算法。
4.1十进制转二进制
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
我们以177为例,转成二进制则为:10110001
4.2二进制转十进制
二进制转十进制通常采用按位权展开法,将二进制数的每一位上的数乘以2的n次方,n等于这一位所在的位置。按位权展开法会将这些乘积分别相加,从而得到每一位的十进制结果,并将这些结果相加以得到最终的十进制结果。
五、结论
二进制数字的每一位只能是0或1,基数是2,所以逢2进1。二进制中的位是计算机数据的最小单位 ,英文表示为bit。而计算机数据的基本单位是字节,英文名为Byte。一个字节有8个位,那么8个位都是0或1的二进制数分别等于十进制的多少?
00000000=0,11111111=255。
可以得出结论,计算机中的一个字节可以表示256个数字。但是,在某些编程语言中,1byte表示的范围是0-255,有的是-128到+127。
Byte也是一种C#数据类型
在C#的数据类型中,byte也是其中的一种数据类型哦,它的范围是0-255。它能表示256个数字。
不管是程序员开发的程序代码,还是这些程序代码所处理的数据,最终都会以二进制的形式“跑”在计算机的CPU与存储器之间。程序代码会被编译成一条一条的二进制机器指令,而数据也是二进制的数据。比如内存,它的地址是二进制形式的数据,它上面存储的数据或指令也都是二进制形式的。
下一节,我们来聊一聊内存,这有助于我们后面学习C#编程哦。
——重庆教主 2023年11月30日
一、什么是内存
从外观上辨识,它就是内存条;从硬件上讲,它叫RAM,翻译过来叫随机存储器。英文全称:Random Access Memory。它也叫主存,是与CPU直接交换数据的内部存储器。其特点是读写速度快,不是一般的快,是我们想像不到的快。
我们可以把内存想像成小时候写作文的本子,只不过,内存的每一行数据都有一个唯一的地址。所以从软件上讲,内存被操作系统管理,根据地址进行寻址和读写数据。对于程序而言,内存是一个逻辑上连续的空间,装载着运行时的程序和数据。为什么说是逻辑上呢,因为有的电脑从物理上看,它可能有两根或以上的内存条,它们都插在主板上,由操作系统将所有的内存条的地址统计进行“登记”,所以,很可能某个程序的一部分存在第一根内存条上,另一部分存在第二根内存条上。但是我们是感知不到的。
内存一般按照字节来编址,从 0 开始,也就是说,地址 0 代表第一个字节,地址 1 代表第二个字节,4GB 的内存,有 2*10^32 个字节,最大的地址就是 2*10^32 - 1,用十六进制表示就是 0xFFFFFFFF,这也是为什么 32 位的操作系统,最大支持 4GB 物理内存的原因,而64位操作系统理论上的寻址空间为2的64次方bit,转化单位为2147483648GB,这只是理论值,目前64位windows系统最大只支持128G。
我们可以把内存看成是一家酒店,地址号代表了房间号,每个房间只能住一个人(一个字节),因为内存被设计成单间。如果要住两个人,那只能开两间房。操作系统是酒店的前台小姐姐,负责房间管理工作。她会知道酒店哪些房间已订或空闲,但是她也是酒店的一员,所以,她也要占用房间,至于占用多少房间,取绝于前台小姐姐这个部门的人数。比如早期的WinXp系统就比较小,启动后所占内存500M-1G,到了如今的WIN11系统,原本16G的内存只剩下80%可用,起码要占用2G的内存空间。行政机构真是越来越臃肿!
程序员的本质工作是什么?
找到前台小姐姐订房,然后将数据和指令安排入住到房间里(这一过程其实是酒店管理人员负责,程序员不用管),操作系统会执行这些指令去处理数据,待处理结束,再将处理好的数据永久保存到外存或输入到其它地方(比如打印出来)。这里会涉及到退房,像C和C++语言,需要程序员来退房,像C#语言则不需要,因为,实际上程序员委托了一家代理商(CLR公共语言运行时)来做开房和退房的工作。
然而在实际程序运行时,有可能出现房间已满无法开房的状态,这个时候可以申请超出物理大小的内存 ,这是因为操作系统提供的其实是虚拟内存(把隔壁的仓库拿出一部分临时改造成酒店的房间),很大一部分申请到的内存,只是建立了映射关系,并没有落到 RAM 里,也有可能一部分内存被交换到了磁盘的 swap 区里。
二、内存装入
不管是操作系统,还是应用程序,它们都存储在硬盘(外存)里面。当我们启动计算机时,首先会点亮主板电源,进而加载并启动主板上的输入输出引导系统(俗称BIOS),这个引导系统会找到硬盘上的操作系统,然后加载操作系统,这个过程实际上是将硬件上的操作系统程序读入到内存。待操作系统完全启动后,将接管对硬件的管理,包括内存的管理。这时,一个16G的内存区域,除了操作系统本身占用了一部分,剩下的区域就等待其它软件和数据去使用。
而程序员要作的,就是开发软件,从操作系统那里申请内存空间,用来存放软件要处理的数据。至于应用软件本身会占据多少内存,如何分配和装入,这一切都交由操作系统来处理。
程序员如何从操作系统哪里申请内存
这一点十分简单,C#有多种数据类型,每种数据类型所占的内存空间大小是不同的,我们会按需申请,绝不浪费,而申请内存的工作其实是交给C#的“运行时”去完成的,我们只需要告诉它一声就行了。即通过new关键词来告诉运行时帮我们开辟内存空间。
在C语言和C++语言中,程序员需要自己主动向操作系统申请空间,待使用完后,再主动销毁,将借来的内存还给操作系统。但是,由于在操作系统和C#之间还存在一个叫CLR运行时的框架,所以,C#程序员在申请内存空间时,其实并不是直接向操作系统申请,而是由CLR运行时在帮助我们完成这一操作。所以,我们申请了内存空间后并不需要还给操作系统,只要这段内存空间不再使用,CLR运行时会帮我们还给操作系统的(即CLR的垃圾回收器支持自动内存管理)。哈,多么人性化的操作!
凡是都有利有弊。CLR的垃圾回收器有时候并不会及时回收内存,而程序员开发出来的软件,因某些业务要不断的申请新的内存空间,总有一刻,内存会被申请完,导致内存不足,程序崩溃。所以,了解内存的结构和正确使用内存,对于立志成为一名高级程序员而言,尤为重要。
C#里面也有及时回收内存的指令,特别是我们申请了超大的连续内存空间,在使用完后,最好及时告诉CLR的垃圾回收器,有借有还,再借不难。
——重庆教主 2023年11月30日
要问计算机的灵魂是啥,那肯定是操作系统。这个词现如今对大多数人都不陌生。操作系统的英文名叫Operating System,简单为OS。首先,大多数操作系统都是C语言或汇编语言开发的一系列程序组成的软件,其次,它主要的功能是控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互。
正式定义:负责管理计算机的硬件和软件资源,并合理的组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统的系统软件。
一、批处理操作系统
早期的计算机并没有操作系统,采用手工操作计算机,用户将与程序和数据对应的穿孔纸带装进输入机,然后启动输入机把程序和数据输入到计算机内存,接着通过控制台启动程序对数据进行运行。计算完毕后,打印输出计算结果,用户可以取走结果,并卸下纸带(或卡片)。
后来手工操作比不上机器处理的速度,造成了计算机资源的浪费,于是人们通过输入机将纸带上的作业读入到磁带上,再将磁带上的作业依次读入到内存,最后将由计算机处理数据。这时才产生了操作系统的概念,同时将这个成批自动处理作业的操作系统称为批处理操作系统。
二、分时操作系统
随着计算机的发展,出现了分时操作系统。因为计算机的本质是计算,往往人们给它安排的任务在极短的时间内就完成了,剩下的都是输入输出操作,而这些操作与输入设备和输出设备的速度有关,这时计算机处于空闲等待状态。于是,人们将CPU的时间切成一片一片的时间片,将每个极小的时间片分配给不同的任务,而这些任务来自不同的终端请求,也就是说,一台主机联接若干个终端,一台主机处理若干个终端的数据请求。假设有十个终端同时向主机发出操作请求,而且在10毫秒内都完成了该操作,在终端的视角上看,它的请求是及时得到了回复的,而在上帝视角上看,这十个终端的请求好像也是“同时”完成的,其实则不然,这只是因为主机的运算极快,主机此时将自己的时间划分成10个时间片,每个时间片只有1毫秒,所以10毫秒内完成了所有终端的请求。
主机很聪明,它通过时间片轮转进行调度,这是一种最古老,最简单,最公平且使用最广的算法,又称RR调度。每个进程都被分配一个时间片。这其实有点像我们有时候下馆子的场景。每次下馆子总是找人多的地儿,意味着那家餐馆比较好吃。只有一两桌的时候,通常的作法是一桌一桌的炒菜,但是人一多,点菜后,等待的时间就越长,这时老板为了避免顾客的不耐烦,就采取了一个策略,就是先把每桌的第一道炒做出来,赶紧上菜,然后再炒每桌的第二道菜,如此往复,直到炒完所有桌的所有菜单。于是,餐饮界的分时炒菜系统就诞生了。在顾客看来,他们都几乎是同时上菜的。只是两道菜之间多了一些等待,起码桌上有吃的,就不再嚷嚷了。
三、实时操作系统
批处理操作系统和分时操作系统虽然能获得较令人满意的资源利用率和系统响应时间,但是不能满足实时控制和实时信息处理的应用需求。后来,人们设计出一种在规定的时间内完成特定功能的操作系统,这能极大的确保效率,并把这样的操作系统称为实时操作系统。
实时操作系统(Real Time Operating System,简称RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。
另外,计算机系统还有网络操作系统、分布式操作系统、个人计算机操作系统、嵌入式操作系统。
四、网络操作系统
网络操作系统是使网络上各计算机能方便而有效地共享网络资源,为网络用户提供所需的各种服务的软件和有关协议的集合。
五、分布式操作系统
分布式系统是以计算机网络为基础的,它的基本特征是处理上的分布,即功能和任务的分布。分布式操作系统的所有系统任务可在系统中任何处理机上运行,自动实现全系统范围内的任务分配并自动调度各处理机的工作负载。
六、个人计算机操作系统
即PC操作系统。最早期出现的是DOS和MS-DOS操作系统,后来微软在其基础之上开发了图形操作系统windows。另外还有一个分支是Unix操作系统,由Unix又衍生出Linux操作系统。
七、嵌入式操作系统
嵌入式操作系统与嵌入式系统有关。现在市场上的仪器仪表、医疗设备、机器人、家用电器等领域硬件的控制中心其实都是由一块芯片在处理,而这个芯片被称为嵌入式的芯片。由这些微处理器芯片所构成的系统称为嵌入式系统,能够操作和管理这套硬件系统的操作系统——我们称为嵌入式操作系统。最典型的就是手机,手机就是一套嵌入式系统,像android、ios这类手机操作系统就是嵌入式操作系统。
我们介绍了形形色色的计算机,它们分处于各自的硬件时代,并成为了人与计算机之间的接口,帮助人们可以更好的操作系统的硬件。若没有操作系统,这一堆由电子管、晶体管、电子元件等构成的机器将无法启动和运行,可以说,操作系统就是计算机的灵魂。
八、操作系统的五大功能
1.处理器管理
处理器是完成运算和控制的设备。在多道程序运行时,每个程序都需要一个处理器,而一般计算机中只有一个处理器。操作系统的一个功能就是安排好处理器的使用权,也就是说,在每个时刻处理器分配给哪个程序使用是操作系统决定的。
2.存储管理
计算机的内存中有成千上万个存储单元,都存放着程序和数据。何处存放哪个程序,何处存放哪个数据.都是由操作系统来统一安排与管理的。这是操作系统的存储功能。
3.设备管理
计算机系统中配有各种各样的外部设备。操作系统的设备管理功能采用统一管理模式,自动处理内存和设备间的数据传递,从而减轻用户为这些设备设计输入输出程序的负担。
4.作业管理
作业是指独立的、要求计算机完成的一个任务。操作系统的作业管理功能包括两点尸是在多道程序运行IC现货商时,使得备用户合理地共享计算机系统资源22是提供给操作人员一套控制命令用来控制程序的运行。
5.文件管理
计算机系统中的程序或数据都要存放在相应存储介质上。为了便于管理,操作系统招相关的信息集中在一起,称为文件。操作系统的文件管理功能就是负责这些文件的存储、检索、更新、保护和共享。
九、人与计算机的距离
从图上看,最里层就是计算机硬件,与硬件最近的是操作系统,如果我们需要管理系统就直接使用操作系统即可,而如果我们要想进一步发挥计算机的效能,在计算机上办公或娱乐,我们可以使用Office、Wps办公,用QQ、微信、视频软件或游戏软件进行娱乐。这些软件我们都称为应用程序,在应用程序与操作系统之间还有一层叫语言处理程序。作为程序员,大致由此也可以分为几个层面,最外层就是应用程序开发者,然后是语言程序开发者,然后是操作系统开发者,最后是驱动程序开发者。
由操作系统而言,我们同样可以按由内到外分层进行结构说明。首先,操作系统的内核是操作系统中应用连接硬件设备的桥梁。内核仅仅是操作系统的一部分,是真正与硬件交互的那部分软件,与硬件交互包括读写硬盘、读写网盘、读写内存以及任何连接到系统中的硬件。
内核提供了一系列功能函数,由这些函数构成的集合称为系统调用,或者叫程序接口或应用编程接口(Application Programming Interface,API),名字不重要,重要的是这帮函数提供了强大的功能,因为这些函数可以管理硬件资源,并为开发人员提供良好的环境,使应用程序具有更好的兼容性。
Windows操作系统关机函数
BOOL ExitWindowsEx(
[in] UINT uFlags,
[in] DWORD dwReason
);
ExitWindowsEx就是Windows内核中的关机函数。我们通常点击Windows左下角的开始菜单 -电源-关机来实现计算机的关机,实际上是调用了这个内核级的API而已。
Shell,俗称壳,为了区别于Kernel内核。如此众多的内核函数,作为开发者或使用者,我们如何去调用它们?Shell就承担了这一功能。例如DOS下的COMMAND.COM和Windows的cmd.exe。Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
应用程序是什么?指为完成某项或多项特定工作的计算机程序,它运行在用户模式,可以和用户进行交互,具有可视的用户界面。它是一个独立的软件包,允许用户在移动或桌面设备上执行特定任务。应用程序通常是用不同的编程语言编写的。例如,Android 应用程序是用 Kotlin、Java和 C++ 编写的,而 iOS 应用程序是在 XCode IDE 下用 Swift 和 Objective-C 编写的。软件包编译代码、数据和资源文件以创建应用程序运行所必需的综合软件包,
我们通常意义上的软件开发,就是指这一类的应用程序开发。
应用程序安装和运行中操作系统当中,离开了操作系统,它无法运行,啥也不是。那么,世界上有Unix、Linux、Windows、Andorid、ios等操作系统,他们当中的应用程序可以相同吗?很可惜,基本不能。这就好比一个人跑到另一个国家,因为语言不通,无法生活,除非你带个翻译。Java就可以跨平台而运行,其原因就是因为它在不同的操作系统里面都有“翻译官”——JVM。C#能不能跨平台?C#原先在Windows下面有一个翻译官叫.Net Framework,所以由C#开发的应用程序能运行在Windows操作系统,但是,出于竞争缘由——其它操作系统没有翻译官。后来Java在某一段时间内一骑绝尘,这时微软才反应过来,再这么封闭下去,C#就没有蛋糕啦,于是赶紧开发了.Net Core,又是开源又是跨平台,希望能够亡羊补牢。
C#在其它操作系统中有了.Net Core翻译官,这时才可以跨平台了,而在Windows操作系统中,C#就有了两个翻译官,分别是旧人.Net Framework和新人.Net Core,从此新人胜旧人,.Net Framework便不再开发了,转而开发.Net Core版本。
OK,不能跑题,因为要介绍C#的翻译官——CLR,必须得另开一章了。现在讲它们还为时过早,作为立志要成为一名优秀程序员的我们,先了解一下源代码的概念,毕竟,程序员的一生都要与它打交道。我们下一节来介绍什么是源代码。
——重庆教主 2023年12月4日
由于计算机硬件只能识别和执行二进制代码形式的机器语言,所以,人类要想控制一台计算机,也必须得按照它能理解的方式编程。但这显示苦了程序员,因为二进制形式的机器语言全是0和1组成起来的程序代码,机器虽然方便了,人却不方便了。于是人们发明了汇编语言,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。这大大增强了人们对计算机的控制力。
Intel X86架构的机器语言
10110000 01100001 00000000 00000000 ; 将值1存储到寄存器AL
10110000 01100010 00000000 00000001 ; 将值2存储到寄存器BL
10000000 01100000 01100001 ; 将寄存器AL的值和寄存器BL的值相加
一、汇编语言
汇编语言的英文名叫Assembly Language,也叫符号语言,在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能,对现有程序的bug修复以及运营维护都变得更加简单方便。但计算机的硬件不认识字母符号,这时候就需要一个专门的程序把这些字符变成计算机能够识别的二进制数或机器语言。这个专门的程序也可以叫做编译器。此时,编程界的三个重要概念就诞生了,它们分别是由程序员编写的程序代码,我们称为源代码,能够把源代码编译成机器能够识别和执行的代码的程序,我们称为编译器,计算机硬件能够识别和执行的程序,我们称为目标代码。
汇编语言开发的源代码
call DispStr
mov ax,BootMessage
mov bp,ax ;串地址
mov cx,11 ;串长度
mov ax,01301h ;AH = 13,AL = 01h
mov bx,000ah ;黑底绿字
mov dl,0
int 10h ;10h号中断
ret
虽然汇编语言利用符号代替了计算机的指令和地址,但是编写汇编程序还是比较困难的,其主要的原因是它的表达方式并人类的表达方式不一样。于是为了让程序员提高开发效率,写出更利于阅读和维护的源代码,C语言就诞生了。
二、C语言
C语言是一门面向过程的计算机编程语言,它的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且c语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。
于是,程序结构、数据类型、控制流程、函数、指针等编程概念相继诞生了。这些都是面向过程编程的知识点。
C语言开发的源代码
/*
输出Hello, world!
*/
#include <stdio.h> /* 包含头文件 */
int main() // 主函数
{
printf("Hello, world!\n"); // 在屏幕上打印Hello, world!并换行
return 0;
}
C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%-20%。因此,C语言可以编写系统软件。比如Unix、Windows等都是C语言开发的。
三、高级语言
然而,如果我们要在操作系统上开发和使用应用软件,充分利用操作系统提供的API,并快速开发拥有大量业务的桌面软件或Web程序,C语言就显得力不从心了,因为它更偏向于硬件底层,于是,新的程序设计思想被提出来,也就是面向对象编程(Object Oriented Programming),简称OOP。其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。
我们生活在现实中,所处的环境是三维环境(有说是四维——时间)。构成我们生活的环境充满了万事万物,事物就是指我们生活中客观存在的东西——我们把这个事物称为object。object就是指一个对象。比如,周星驰电影中的阿黄和小强就是一个具体的对象,因为我们看得见摸得着,它们俩实实在在的存在。它们分别是一条狗和一只蟑螂。注意,阿黄只是属于狗这一类型,小强则属于蟑螂这一类型,于是狗和蟑螂便是“类型”,因为它们不是具体的某个事物,而是泛指某一类型的事物。
由此,对象和类型这两种概念就诞生了。在后来的高级编程语言中,它们都是建立在对象和类型的基础上去设计和开发程序的。
C#就是面向对象编程的程序设计语言,它由C和C++衍生出来,运行于.NET Framework和.NET Core框架之上,由微软发布于2000年6月,是目前世界上使用最多的程序设计语言之一。
C#语言开发的源代码
//导入一些必备的命名空间
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//当前类的命名空间
namespace CSharpDemo
{
//类名
class Program
{
//主函数
static void Main(string[] args)
{
//向控制台输出hello world
Console.WriteLine("hello world!");
//等待读取字符,可以避免控制台闪退,只有按下回车程序才会结束
Console.ReadLine();
}
}
}
从编码的结构上看,C语言和C#语言差不多,只是C#在结构上的分层更多一些,就好比二维平面和三维立体的感觉,从维度上增加了,所以C#的设计思维更贴近于人类世界的客观存在,而人对世界的感知和抽象能力都是源于所生存的三维世界。
从学习的步骤而言,一般会先学习C语言,为编程打下基础,再学习面向对象编程语言。这就好比先学习在纸上画一条龙,再学习在木头上雕刻一条龙。如果您没有C语言基础也不要紧,谁说一定要先学会在纸上作画的?咱们直接开始雕刻吧。
——重庆教主 2023年12月8日
.NET 是免费的、开源的、跨平台的框架,用于构建新式应用和强大的云服务。也就是说,它是一个构建多种应用的免费开源开发平台,程序员可以在这个平台上开发Web应用、手机和桌面应用、云应用和微服务应用。
微软早期只有 .NET Framework,因为它不能跨平台,后来又推出了.NET Core,2019年将两者合二为一,更名为.NET 5.0,到今天最新的.NET版本是.NET 8.0。
在Windows操作系统中,.NET采用Visual Studio作为集成开发环境工具,在Linux、macOS 中用Visual Studio Code,而在Mac操作系统中使用Visual Studio for Mac。
.NET编程语言有哪些?可以使用 C#、F# 或 Visual Basic 编写 .NET 应用。
.NET开发平台由哪些构成?
如上图所示,.NET开发平台由3部分构成。
一、公共语言运行时CLR
.NET平台下编写的程序一般都在公共语言运行时(Common Language Runtime,CLR)的管理下运行,它负责运行代码,确保代码的安全性和准确性,又负责内存管理、线程调度等核心服务,通常把在CLR控制下运行的代码称为托管代码(Managed Code)。
托管代码与平台无关,只与CLR有关,因为托管代码运行在CLR之上,不管什么操作系统,只要能运行CLR,就能在CLR上运行.NET应用。另外,CLR支持C#、F#、VB语言;CLR提供的垃圾回收机制,可以实现自动内存管理,当对象或变量的生命周期结束后,CLR会自动释放它们所占用的内存空间。
二、FCL类库
.NET为我们提供了一个内容丰富的.NET框架基础类库(Framework Class Library,FCL),如果将C#程序比喻为一座大厦,那么大厦的设计思想就是面向对象编程,而建筑大厦的材料则来自于.NET框架基础类库和程序员开发的自定义类,我们可以像使用钢筋、水泥、砖块一样使用FCL中的类构建应用程序大厦。因此学习C#的一个重点就是学习FCL类库中的常用类。
三、Visual Studio 开发环境
Visual Studio是开发.NET的开发工具,目前最新版本为2002,它拥有强大的开发、调试、测试、编译与软件部署功能。例如,使用 IntelliSense 代码建议快速准确地编写代码。 使用启用了机器学习的 IntelliCode 中的建议完成整行代码。 使用提出重命名函数或添加参数等操作建议的灯泡快速改进代码。
——重庆教主 2023年12月12日