作为一名开发人员,您可能会将您的技能集中在解决问题和数据结构上。嗯,毫无疑问,这是最重要的技能之一。除此之外,你有没有想过还有什么更重要?考虑这样一个场景:您正在执行代码,但您的程序运行速度太慢。你检查你的代码,你发现你的代码没有任何问题。这背后的原因可能是什么?
嗯,原因之一可能是您的操作系统。现在如果你需要调试你的程序,那么如果你不知道你的操作系统是如何工作的,你会怎么做。可能是您访问了太多文件、内存不足或交换使用率很高。要解决此问题,您肯定需要了解交换或 I/O 阻塞。
您将如何与您的机器通信?您会更喜欢本地,还是会在互联网上这样做?你有没有想过为什么有些程序员更喜欢一个操作系统而不是另一个?
从以上所有对话中,您可能已经明白为什么学习操作系统很重要。作为开发人员,我们应该了解操作系统的重要性。今天在这个博客中,我们将讨论操作系统的一些重要概念,它们将有助于您作为开发人员的工作。
1. 流程与流程管理
进程基本上被定义为一个正在执行的程序。该过程应按顺序执行。当您在文本文件中编写计算机程序并执行该程序时,它就成为您系统中的一个进程。此过程执行程序中提到的所有任务。一个进程主要分为四个部分:堆栈、堆、文本和数据。
- 栈:栈负责存储函数/方法参数等临时数据。它返回地址和局部变量。
- 堆:堆在运行时动态地为进程分配内存。
- 文本:文本包括由程序计数器的值和存储在处理器寄存器中的数据表示的当前活动。
- 数据:它包含全局和静态变量。
一个进程主要通过五种不同的状态……开始、就绪、运行、等待、终止或退出。
2. 线程的概念
您可以将线程定义为通过流程代码的执行流。线程在程序计数器中跟踪所有接下来需要执行的指令。此外,线程包含保存当前工作变量的系统寄存器。在线程中,堆栈包含执行历史。
线程可以与其对等线程共享代码段、数据段和打开的文件。当一个代码段被一个线程更改时,所有其他线程都会看到这一点。线程也称为轻量级进程。应用程序的性能可以通过并行性来提高。
一个线程只属于一个进程,任何线程都不能存在于进程之外。线程一般用于实现web服务器和网络服务器。主要有两种线程…
用户级线程:在这一级线程中,线程管理内核不知道线程的存在。 Thread 库还维护用于创建和销毁线程的代码。它还包含用于在线程之间传递消息和数据的代码。还维护用于调度线程执行和恢复线程上下文的代码。
内核级线程:线程级管理由内核完成。在应用程序区,你不会找到线程管理代码。它由操作系统直接支持。
内核还维护各个线程和整个进程的上下文信息。调度也是在线程基础上完成的。内核负责创建、调度和管理内核空间。
3. 调度
在调度中,进程管理器负责将正在运行的进程从 CPU 中移除,并根据特定策略选择另一个进程。对于多道程序来说,调度是操作系统必不可少的部分。一次可以将多个进程加载到可执行内存中。该进程在加载后使用时间多路复用共享 CPU。
在进程调度队列中,操作系统维护着所有的进程控制块。操作系统为每个进程状态维护一个单独的队列。处于同一执行状态的所有进程的进程控制块都维护在同一个队列中。
主要是你的操作系统维护了以下重要的进程调度队列:
- 作业队列:负责保存系统中的所有进程
- 就绪队列:在主内存中,所有准备就绪并等待执行的进程都驻留在内存中。
- 设备队列:该队列存储由于 I/O 设备不可用而被阻塞的进程
4. 内存管理
内存管理是指操作系统处理和管理主内存的功能。进程在执行过程中在主存和磁盘之间来回移动。
内存位置由内存管理跟踪。每次它都会检查分配给进程的内存量。它还决定哪个进程在什么时间获得内存。此外,只要内存被释放或未分配,它就会更新状态。操作系统在分配内存时将逻辑地址映射到物理地址。程序中主要使用三种类型的地址……
- 符号地址:在源代码中使用。变量名、常量和指令标签是符号地址空间的基本元素。
- 相对地址:编译期间,编译器将符号地址转换为相对地址。
- 物理地址:加载程序负责在程序加载到主内存时生成这些地址。
5. 进程间通信
在操作系统中,进程分为两种类型:独立的和协作的。独立进程不会受到其他进程执行的影响。一个协作进程受到另一个执行进程的影响。
独立进程高效执行,在这些情况下,它们的协作性质被用于提高计算速度、便利性和模块化。在这种机制中,允许进程相互通信。沟通被视为他们之间合作的一种方式。