程序员需要了解的硬核知识之操作系统和应用(一)

简介: 这是 Java 建设者的第 45 篇原创文章利用计算机运行程序大部分都是为了提高处理效率。例如,Microsoft Word 这样的文字处理软件,是用来提高文本文件处理效率的程序,Microsoft Excel 等表格计算软件,是用来提高账本处理效率的程序。这种为了提高特定处理效率的程序统称为 应用程序员的工作就是编写各种各样的应用来提高工作效率,程序员一般不编写操作系统,但是程序员编写的应用离不开操作系统,此篇文章我们就针对 Windows 操作系统来说明一下操作系统和应用之间的关系。

利用计算机运行程序大部分都是为了提高处理效率。例如,Microsoft Word 这样的文字处理软件,是用来提高文本文件处理效率的程序,Microsoft Excel 等表格计算软件,是用来提高账本处理效率的程序。这种为了提高特定处理效率的程序统称为 应用

程序员的工作就是编写各种各样的应用来提高工作效率,程序员一般不编写操作系统,但是程序员编写的应用离不开操作系统,此篇文章我们就针对 Windows 操作系统来说明一下操作系统和应用之间的关系。

操作系统功能的历史

操作系统其实也是一种软件,任何新事物的出现肯定都有它的历史背景,那么操作系统也不是凭空出现的,肯定有它的历史背景。

在计算机尚不存在操作系统的年代,完全没有任何程序,人们通过各种按钮来控制计算机,这一过程非常麻烦。于是,有人开发出了仅具有加载和运行功能的监控程序,这就是操作系统的原型。通过事先启动监控程序,程序员可以根据需要将各种程序加载到内存中运行。虽然仍旧比较麻烦,但比起在没有任何程序的状态下进行开发,工作量得到了很大的缓解。

59.jpg


随着时代的发展,人们在利用监控程序编写程序的过程中发现很多程序都有公共的部分。例如,通过键盘进行文字输入,显示器进行数据展示等,如果每编写一个新的应用程序都需要相同的处理的话,那真是太浪费时间了。因此,基本的输入输出部分的程序就被追加到了监控程序中。初期的操作系统就是这样诞生了。

60.jpg


类似的想法可以共用,人们又发现有更多的应用程序可以追加到监控程序中,比如硬件控制程序编程语言处理器(汇编、编译、解析)以及各种应用程序等,结果就形成了和现在差异不大的操作系统,也就是说,其实操作系统是多个程序的集合体。

61.jpg

我在 程序员需要了解的硬核知识之CPU这篇文章中提到了汇编语言,这里简单再提一下。

汇编语言是一种低级语言,也被称为符号语言。汇编语言是第二代计算机语言,在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。用一些容易理解和记忆的字母,单词来代替一个特定的指令,比如:用ADD代表数字逻辑上的加减,MOV代表数据传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能,对现有程序的bug修复以及运营维护都变得更加简单方便

可以说共用思想真是人类前进的一大步,对于解放生产力而言简直是太重要了

要把操作系统放在第一位

对于程序员来说,程序员创造的不是硬件,而是各种应用程序,但是如果程序员只做应用不懂硬件层面的知识的话,是无法成为硬核程序员的。现在培训机构培养出了一批怎么用的人才,却没有培训出为什么这么做的人才,毕竟为什么不是培训机构教的,而是学校教的,我很相信耗子叔说的话:学习没有速成这回事。言归正题。

在操作系统诞生之后,程序员不需要在硬件层面考虑问题,所以程序员的数量就增加了。哪怕自称对硬件一窍不通的人也可能制作出一个有模有样的程序。不过,要想成为一个全面的程序员,有一点需要清楚的就是,掌握硬件的基本知识,并借助操作系统进行抽象化,可以大大提高编程效率。

下面就看一下操作系统是如何给开发人员带来便利的,在 Windows 操作系统下,用 C 语言制作一个具有表示当前时间功能的应用。time() 是用来取得当前日期和时间的函数,printf() 是把结果打印到显示器上的函数,如下:

#include <stdio.h>
#include <time.h>
void main(){
  // 保存当前日期和时间信息
  time_t tm;
  // 取得当前的日期和时间
  time(&tm);
  // 在显示器上显示日期和时间
  printf("%s\n", ctime(&tm));
}

读者可以自行运行程序查看结果,我们主要关注硬件在这段代码中做了什么事情

  • 通过 time_t tm,为 time_t 类型的变量申请分配内存空间;
  • 通过 time(&tm) ,将当前的日期和时间数据保存到变量的内存空间中
  • 通过 printf("%s\n",ctime(&tm)), 把变量内存空间的内容输出到显示器上。

应用的可执行文件指的是,计算机的 CPU 可以直接解释并运行的本地代码,不过这些代码是无法直接控制硬件的,事实上,这些代码是通过操作系统来间接控制硬件的。变量中涉及到的内存分配情况,以及 time() 和 printf() 这些函数的运行结果,都不是面向硬件而是面向操作系统的。操作系统收到应用发出的指令后,首先会对该指令进行解释,然后会对 时钟IC 和显示器用的 I/O 进行控制。


计算机中都安装有保存日期和时间的实时时钟(Real-time clock),上面提到的时钟IC 就是值该实时时钟。

62.jpg


相关文章
|
9天前
|
安全 算法 Unix
深入浅出操作系统:从基础概念到实践应用
【10月更文挑战第22天】本文旨在以浅显易懂的语言,为读者揭开操作系统的神秘面纱。我们将从操作系统的基本概念出发,逐步深入其核心功能与设计哲学,并通过具体代码示例,展示操作系统如何在实际中发挥作用。无论你是计算机科学的学生,还是对技术有浓厚兴趣的爱好者,这篇文章都将为你提供一次轻松愉快的操作系统之旅。
22 4
|
2月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
2月前
|
Java 开发工具 Android开发
移动应用开发之旅:探索移动操作系统与应用构建的奥秘
【8月更文挑战第33天】在数字时代的浪潮中,移动应用已成为我们日常生活的一部分。本文将带您深入理解移动操作系统的工作原理,并揭示如何在这个多姿多彩的平台上开发出引人入胜的应用。我们将从基础概念出发,逐步深入到高级编程技巧,最终通过一个实际的代码示例,展示如何将理论应用于实践。无论您是初学者还是有经验的开发者,这篇文章都将为您提供宝贵的见解和灵感。让我们一起踏上这场激动人心的移动应用开发之旅吧!
|
3月前
|
Rust 安全 编译器
【颠覆传统】Rust跨平台开发秘籍:如何轻松驾驭多操作系统,打造无缝兼容应用?
【8月更文挑战第31天】Rust语言凭借其内存安全、卓越性能及丰富的标准库支持,正逐渐成为跨平台开发的新宠。本文通过具体代码示例,展示如何用Rust编写可在多种操作系统上无缝运行的应用程序。Rust通过所有权、借用和生命周期等机制提升代码安全性,并在编译时检测潜在错误。其编译器支持广泛平台,包括Windows、macOS和Linux等,非常适合跨平台开发。此外,Rust还可用于开发复杂的GUI应用,利用GTK、Qt等成熟框架实现跨平台图形界面。无论开发命令行工具还是图形界面应用,Rust均能提供高效稳定的解决方案。
173 1
|
2月前
|
消息中间件 程序员 数据处理
探究操作系统中的进程间通信(IPC)机制及其在现代软件开发中的应用
本文深入探讨了操作系统中的核心概念——进程间通信(IPC),揭示了其在现代软件开发中的关键作用。通过对各种IPC机制如管道、消息队列、共享内存等的详细分析,本文旨在为读者提供一个清晰的理解框架,帮助他们掌握如何在实际应用中有效利用这些技术以实现进程间的协同工作。此外,文章还将探讨IPC在高并发环境下的性能优化策略,以及如何避免常见的IPC编程错误。通过结合理论与实践,本文不仅适合希望深入了解操作系统原理的技术人员阅读,也对那些致力于提升软件质量和开发效率的程序员具有重要参考价值。
41 0
|
3月前
|
机器学习/深度学习 网络安全 TensorFlow
探索操作系统的心脏:内核与用户空间的奥秘云计算与网络安全:技术挑战与未来趋势深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【8月更文挑战第29天】在数字世界的每一次点击与滑动背后,都隐藏着一个不为人知的故事。这个故事关于操作系统——计算机的灵魂,它如何协调硬件与软件,管理资源,并确保一切运行得井井有条。本文将带你走进操作系统的核心,揭示内核与用户空间的秘密,展现它们如何共同编织出我们日常数字生活的底层结构。通过深入浅出的讲解和代码示例,我们将一同解锁操作系统的神秘面纱,理解其对现代计算的重要性。 【8月更文挑战第29天】本文将深入探讨卷积神经网络(CNN)的基本原理和结构,以及它们如何被广泛应用于图像识别任务中。我们将通过代码示例来展示如何使用Python和TensorFlow库构建一个简单的CNN模型,并训练
|
5月前
|
监控 程序员 Python
程序员必知:天兔(Lepus)监控操作系统(OS)安装配置
程序员必知:天兔(Lepus)监控操作系统(OS)安装配置
17 1
|
5月前
|
监控 程序员 Python
程序员必知:天兔(Lepus)监控操作系统(OS)安装配置
程序员必知:天兔(Lepus)监控操作系统(OS)安装配置
48 1
|
4月前
|
Python
智能卡系统工程是一个涉及多个方面的复杂系统,包括硬件(如读卡器、智能卡)、软件(如读卡器驱动程序、智能卡操作系统和应用软件)以及网络通信等。
智能卡系统工程是一个涉及多个方面的复杂系统,包括硬件(如读卡器、智能卡)、软件(如读卡器驱动程序、智能卡操作系统和应用软件)以及网络通信等。
|
5月前
|
存储 API 调度
深入理解操作系统:从内核到应用
【6月更文挑战第25天】本文将深入探讨操作系统的内部结构、功能以及它如何与应用程序交互。我们将从内核开始,逐步了解进程管理、内存管理、文件系统等关键组件,并讨论操作系统如何支持多任务处理和并发。最后,我们将探讨操作系统与应用程序之间的接口,以及操作系统如何影响应用程序的性能和稳定性。