用电脑来运行程序,多半是为了提高处理效率。例如,MicrosoftWord等文字处理软件是用来提高文本文件处理效率的程序,MicrosoftExcel等表格计算软件是用来提高账簿处理效率的程序。这类提高具体处理效率的程序统称为应用程序员。程序员的工作就是编写各种应用程序来提高工作效率。程序员一般不写操作系统,但是程序员写的应用程序离不开操作系统。在本文中,我们将针对Windows操作系统解释操作系统和应用程序之间的关系。操作系统功能的历史操作系统实际上是一种软件。任何一个新事物的出现,都必须有它的历史背景,所以操作系统也不是凭空出现的,它一定有它的历史背景。在那个电脑没有操作系统的时代,根本就没有程序,人们通过各种按钮来控制电脑。这个过程非常麻烦。因此,有人开发了一个只有加载运行功能的监控程序,这就是操作系统的雏形。通过提前启动监控程序,程序员可以将各种程序加载到内存中,根据需要运行。虽然还是比较麻烦,但是比起不用任何程序开发,工作量已经大大减轻了。随着时代的发展,人们在使用监控程序编写程序的过程中,发现很多程序都有共同的部分。比如通过键盘输入文字,在显示器上显示数据等等,如果每次写一个新的应用程序都需要同样的处理,那实在是浪费时间。因此在监控程序中加入了基本输入输出部分的程序。这就是早期操作系统的诞生方式。类似的想法可以分享,人们发现可以在监控程序中加入更多的应用程序,如硬件控制程序、编程语言处理器(汇编、编译、分析)和各种应用程序等,结果形成并现在的操作系统差别不大,也就是说,操作系统实际上是多个程序的集合。在程序员需要了解的CPU硬核知识一文中提到了汇编语言,这里就简单提一下。汇编语言是一种低级语言,也称为符号语言。汇编语言是第二代计算机语言。在汇编语言中,助记符用于代替机器指令的操作码,地址符号或标号用于代替指令或操作数的地址。用一些容易理解和记忆的字母和词来代替具体的指令,如:用ADD表示数字逻辑中的加减法,MOV表示数据传输等,这样便于人们阅读完成的程序或了解程序正在执行的功能,现有程序的错误修复和运维变得更加容易和方便。可以说分享思想真的是人类的一大进步,对于解放生产力来说简直太重要了。把操作系统放在第一位对于程序员来说,程序员创造的不是硬件,而是各种应用程序,但如果程序员只做应用,不了解硬件的知识,就无法成为硬核程序。职员。现在培训机构培养了一批会用的人才,但是没有培养出这样做的人才。毕竟,为什么不是培训机构教的,而是学校教的呢?我真的很相信老鼠大叔说的:没有速成班这回事。离家更近。操作系统诞生后,程序员不需要考虑硬件层面的问题,所以程序员的数量增加了。即使是声称对硬件一无所知的人也可以编写出像样的程序。但是,要想成为一个全面的程序员,有一点需要明确的是,掌握硬件的基础知识,并借助操作系统进行抽象,可以大大提高编程效率。让我们来看看操作系统是如何为开发者带来便利的。在Windows操作系统下,用C语言编写一个具有指示当前时间功能的应用程序。time()是用于获取当前日期和时间的函数,printf()是将结果打印到显示器的函数,如下:#include#includevoidmain(){//保存当前日期时间信息time_ttm;//获取当前日期时间time(&tm);//在显示器上显示日期时间printf("%s\n",ctime(&tm));}读者可以自己运行程序看结果,我们主要关注这段代码中硬件做了什么。通过time_ttm,为time_t类型的变量分配内存空间;通过time(&tm),将当前日期时间数据保存到变量内存空间中通过printf("%sn",ctime(&tm)),将变量内存空间的内容输出到显示器。应用程序的可执行文件是指计算机的CPU可以直接解释运行的本地代码,但这些代码不能直接控制硬件。实际上,这些代码是通过操作系统间接控制硬件的。变量所涉及的内存分配,以及time()、printf()等函数的运行结果,都不是面向硬件的,而是面向操作系统的。操作系统收到应用程序的命令后,首先会解释命令,然后控制时钟IC和显示器的I/O。所有的电脑都装有一个实时时钟(Real-timeclock),用来保存日期和时间,上面提到的时钟IC就是实时时钟。系统调用和编程语言的可移植性,操作系统控制硬件的功能,都是以一些小的函数集合的形式提供的。这些函数和调用函数的行为称为系统调用,即通过应用程序调用操作系统。在前面的程序中,使用了time()和printf()函数,系统调用也封装在这些函数里面。C等高级编程语言不绑定特定的操作系统,因为无论是Windows操作系统还是Linux操作系统,都希望可以使用相同的源代码。因此,高级编程语言的机制是使用唯一的函数名,然后在编译时将其转换为系统调用(也可能是多个系统调用的组合)。也就是说,用高级语言编写的应用程序在编译后使用系统调用转换为本地代码。不过也有编程语言直接调用高级语言的系统调用。但是,使用这种方法制作应用程序是不可移植的。可移植性:可移植性是指同一程序在不同操作系统下运行所需的时间。更少的时间证明更好的便携性。操作系统和高级编程语言对硬件进行抽象通过使用操作系统提供的系统调用,程序员不必直接编写程序来控制硬件,而使用高级编程语言,有时无需考虑经常自动触发的系统调用的存在,操作系统和高级编程语言对硬件进行抽象的能力是可圈可点的。下面看一个硬件抽象的具体例子#includevoidmain(){//打开文件FILE*fp=fopen("MyFile.txt","w");//写入文件fputs("hello",fp);//关闭文件fclose(fp);}上面的代码是用C写的程序,fputs()是用来向文件写入字符串的函数,fclose()是用来关闭文件的档案功能。上述应用程序编译运行后,会将“Hello”字符串写入文件。文件是操作系统对磁盘空间的抽象,正如我们在《程序员需要了解的硬核知识磁盘》一文中提到的。磁盘就像年轮,磁盘是按扇区读写的。单元由轨道寻址。如果直接读写硬件,则通过指定扇区位置给磁盘的I/O来读写数据。然而,在上面的代码中,扇区根本没有出现。传递给fopen()函数的参数是文件名MyFile.txt和写在指定文件中的w。传递给fputs()的参数是字符串“hello”和写入文件的fp,传递给fclose()的参数只有fp,表示磁盘通过打开文件抽象磁盘。打开文件的操作可以说是对硬件的操作指令。我们来看看代码清单中fp的作用。变量fp被赋予fopen()函数的返回值,称为文件指针。应用程序打开文件后,操作系统会自动申请分配内存空间,用于管理文件的读写。可以从fopen()函数的返回值中获取内存地址。用fopen()打开一个文件后,接下来就是通过指定的文件指针进行操作。正因为如此,fputs()和fclose()以及fclose()在参数中有一个指定的文件指针。由此我们可以得出结论,应用程序通过系统调用和磁盘抽象来控制硬盘。Windows操作系统的特点Windows操作系统拥有世界上最多的用户。作为Windows操作系统的资深用户,您了解Windows操作系统的特点吗?下面列出了Windows操作系统的一些功能。Windows操作系统有32位和64位两个版本,通过API函数集成提供系统调用。使用图形用户界面提供用户界面。通过所见即所得打印输出。WYSIWYG其实就是所见即所得,显示器上显示的图文可以原样输出到打印机,值得。提供多任务功能,即可以同时开启多个任务,提供网络功能和数据库功能,通过即插即用实现设备驱动自设置。32位操作系统单独介绍这里所指的32位操作系统代表了处理效率最高的数据大小。Windows处理数据的基本单位是32位。这一点和一开始的MS-DOS等16位操作系统不同,因为在16位操作系统中需要处理两次32位数据,而32位操作系统可以处理32位数据只有一次,所以一般在windows上的应用程序,它们能处理的数据最高是32位的。例如,用C语言处理整型数据时,有8位char型、16位short型、32位long型三种选择。如果使用位数较多的long类型进行处理,只会增加内存。而且磁盘的开销对性能影响不大。现在市面上的操作系统大部分都是64位操作系统,64位操作系统也是如此。系统调用是通过API函数集提供的Windows通过称为API的函数集提供系统调用。API是应用程序与操作系统之间的接口,全称是ApplicationProgrammingInterface。目前主流的32位版本的WindowsAPI也称为Win32API。之所以取这个名字是因为需要区别于不同的操作系统,比如最早的16位版本的Win16API,以及后来流行的Win64API。API是通过几个DLL文件提供的,每个API的实体都是用C语言编写的函数。因此,在C语言环境下,更容易使用API??。例如API使用的MessageBox()函数就存放在Windows提供的DLL文件user32.dll中。提供基于GUI的用户界面。GUI(GraphicalUserInterface)是指图形用户界面,通过点击显示器上的窗口和图标来可视化。例如Linux操作系统有两个版本,一个是简单版直接通过命令行控制硬件,而可视化版是通过光标点击图形界面来控制硬件。所见即所得打印输出所见即所得是指显示器上输出的内容可以直接由打印机打印出来。在Windows中,显示器和打印机被视为等价的图形输出设备,这一特性也为所见即所得提供了条件。借助WYSIWYG功能,程序员可以从容应对。最初,为了在显示器上显示和在打印机上打印,需要自己编写程序,但在Windows中,你可以使用所见即所得,基本上在一个程序中完成显示和打印这两个功能。提供多任务功能多任务是指同时运行多个应用程序的功能。Windows通过时钟分频技术实现多任务处理功能。时钟拆分是指多个程序在较短的时间间隔内切换运行的方式。从用户的角度看,好象是多个程序在同时运行,底层是CPU时间片,这也是多线程多任务的核心。提供网络功能和数据库功能在Windows中,网络功能作为标准功能提供。有时也会附加数据库(数据库服务器)功能。网络功能和数据库功能虽然不是操作系统不可或缺的,但由于它们与操作系统非常接近,所以统称为中间件而不是应用程序。这意味着它处于操作系统和应用程序的中间层。操作系统和中间件的组合称为系统软件。应用程序不仅可以利用操作系统,还可以利用中间件功能。与操作系统一旦安装就不能轻易更换相比,中间件可以按需更换。但是,对于大多数应用来说,如果更换了中间件,应用也会随之更换。从这个角度来说,更换中间件也没有那么容易。通过即插即用自动设置设备驱动程序即插即用(Plug-and-Play)是指连接(plug)一个新设备后可以直接使用的机制。自动安装和配置用于控制设备的驱动程序设备驱动程序是操作系统的一部分,它为硬件提供基本的输入和输出功能。键盘、鼠标、显示器、磁盘设备等,这些计算机中必要硬件的设备驱动程序一般都随操作系统一起安装。有时DLL文件也会与设备驱动程序文件一起安装。这些DLL文件存储了使用新添加的硬件的API,通过API可以创建运行硬件的心脏应用程序。