首页 > 其他分享 >第三章学习笔记

第三章学习笔记

时间:2023-10-22 18:23:26浏览次数:27  
标签:调用 第三章 操作系统 笔记 学习 管道 进程 执行 execve

第三章学习笔记

一、Linux进程管理

1.多任务处理

  • 在计算机技术中,多任务处理指的是同时执行几个独立的任务。
  • 在单处理器(单CPU)系统中,一次只能执行一个任务。
  • 多任务处理是通过在不同任务之间多路复用CPU的执行时间来实现的,即将CPU执行操作从一个任务切换到另一个任务。
  • 不同任务之间的执行切换机制称为上下文切换,将一个任务的执行环境更改为另一个任务的执行环境。如果切换速度足够快,就会给人一种同时执行所有任务的错觉。这种逻辑并行性称为“并发”。
  • 在有多个CPU或处理器内核的多处理器系统中,可在不同CPU上实时、并行执行多项任务。此外,每个处理器也可以通过同时执行不同的任务来实现多任务处理。
  • 多任务处理是所有操作系统的基础。总体上说,它也是并行编程的基础。

2.进程的概念

  • 操作系统是一个多任务处理系统。在操作系统中,任务也称为进程。在实际应用中,任务和进程这两个术语可以互换使用。在第2章中,我们把执行映像定义为包含执行代码、数据和堆栈的存储区。
  • 进程是对映像的执行。
  • 操作系统内核将一系列执行视为使用系统资源的单一实体。系统资源包括内存空间以及最重要的CPU时间。在操作系统内核中,每个进程用一个独特的数据结构表示,叫作进程控制块(PCB)或任务控制块(TCB)等。在本书中,我们直接称它为PROC结构体。与包含某个人所有信息的个人记录一样,PROC结构体包含某个进程的所有信息在实际操作系统中,PROC结构体可能包含许多字段,而且数量可能很庞大。

3.进程管理的系统调用

1)创建

系统在最开始启动后并不会有太多的进程,需要有一个系统调用能够在接下来的使用中创建更多的进程。例如我们的shell,可以在shell中使用命令创建一个进程。

  • 做一份进程完整的复制(内存、寄存器运行现场)
  • 父进程返回子进程的pid,子进程返回0
  • 那么创建一个进程叫做叉子。以刚才的qq进程为例,如果它调用了fork,系统调用就会在当前系统中多出一个进程,而这个进程是之前qq进程的拷贝,它包括几乎所有的进程当前的状态(除了返回值pid),包括内存、寄存器。原来的进程也叫父进程和新创建的进程也叫子进程都可以继续向下执行,所以说它像一个叉子,走着走着就分了个叉。父进程返回值是子进程的pid,子进程的返回值是0。

2)execve系统调用

除了能够对进程进行创建,还需要能够执行别的程序,execve系统调用就是这样一个功能,将当前运行的进程“替换”成另一个程序,从头开始执行。fork以后得到的进程是与父进程相同的,但是跟多的时候我们创建子进程是为了让他执行不同的程序,去做别的工作。execve就是启动一个新程序的系统调用。exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。
execve(filename,argv,enpv)
//执行名称为filename的程序
//分别传入参数v,环境变量e
一个进程调用execve以后,它没有创建新的进程,而是从传入的可执行程序中加载代码和静态数据,并用它覆写自己的代码段、堆、栈,以及其他内存空间也会被重新初始化。然后操作系统就执行该程序。所以对execve的成功调用永远不会返回,只有在发生错误的时候才会返回-1,从原程序的调用点接着往下执行。

4.I/O重定向

  1. fork()操作:
  2. 进程终止
  • 正常终止:每个C程序的 main()函数都是由C启动代码 crt0.o调用的。如果程序执行成功,main()最终会返回到 crt0.o,调用库函数 exit((0)来终止进程。首先,exit(value)函数会执行一些清理工作,如刷新 stdout、关闭I/O流等。然后,它发出一个_exit(value)系统调用,使进入操作系统内核的进程终止。
  • 异常终止:在执行某程序时,进程可能会遇到错误,如非法指令、越权、除零等,这些错误会被 CPU识别为异常。当某进程遇到异常时,它会进入操作系统内核。内核的异常处理程序将陷阱错误类型转换为一个函数,称为信号,将信号传递给进程,使进程终止。

5.管道

  • 管道是用于进程交换数据的单向进程间通信通道。管道有一个读取端和一个写入端。可从管道的读取端读取写入管道写入端的数据。自从管道在最初的Unix 中首次出现以来,已经被用于几乎所有的操作系统中,有许多变体。一些系统允许双向管道,在双向管道上,数据可以双向传输。普通管道用于相关进程。命名管道是不相关进程之间的 FIFO通信通道。但是,如果管道不再有读进程,写进程必须将这种情况视为管道中断错误,并中止写入。

  • Unix/Linux中的管道编程
    管道中断状况并不具有对称性。这是一种只有读进程没有写进程的通信通道。实际上,管道并未中断,因为只要管道有数据,读进程就仍可继续读取。

二、知识点挑战

1.I/O重定向

2.linux进程管理

标签:调用,第三章,操作系统,笔记,学习,管道,进程,执行,execve
From: https://www.cnblogs.com/kcf2003/p/17780794.html

相关文章

  • Go笔记(3)-3种go语言的键盘输入详解
    go语言的键盘输入详解go语言中有三种输入函数,分别是:fmt.Scanf()可以按照指定的格式进行输入fmt.Scanln()通过指针将值赋值给变量fmt.Scan()(1)fmt.ScanScan从标准输入扫描文本,读取空白符分隔的值保存到传递给本函数的参数中,将换行符视为空白符使用......
  • 学习笔记6
    关于知识点知识点归纳第三章Unix/Linux进程管理3.1多任务处理一般来说,多任务处理指的是同时进行几项独立活动的能力。计算机科学中的多任务处理:操作系统:多任务处理是操作系统的核心功能之一,它允许多个程序在同一台计算机上并行运行,提高了资源利用率。多线程:多线程是在......
  • 2023-2024-1 20231424 《计算机基础与程序设计》第4周学习总结
    2023-2024-120231424《计算机基础与程序设计》第4周学习总结作业信息作业属于的课程2022-2023-1-计算机基础与程序设计作业要求2022-2023-1计算机基础与程序设计第一周作业作业目标自学计算机科学概论第4章,第5章和C语言程序设计第3章作业正文https://www......
  • #学期2023-2024-1 20231416 《计算机基础与程序设计》》第四周学习总结
    ##作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第四周作业这个作业的目标自学教材:计算机科学概论第4章,第5章,C语言程序设计第3章并完成云班课测试作业正文 https://www.cnblogs.com/shanshu......
  • 机器学习——数据操作(读这一篇就够了!)
    为了能够完成各种数据操作,我们需要某种方法来存储和操作数据。 首先,我们介绍维数组,也称为<strong><em>张量</em></strong>(tensor)。使用过Python中NumPy计算包的读者会对本部分很熟悉。无论使用哪个深度学习框架,它的&......
  • 学习笔记6
    知识点总结:多任务处理:多任务处理是操作系统的一个关键特性,它允许多个进程并发运行。操作系统的多任务处理提供了更好的系统利用率,因为它能够在同一时间内运行多个进程,而不仅仅是一个。多任务处理有助于提供更好的响应时间,因为它允许用户交互并同时运行多个应用程序。进程:......
  • 程序设计语言学习5
    九、上下文无关文法十、中缀后缀表达式 ......
  • 数据库基础学习过程中遇到的一些基础知识
    1、E-R图它是结构化分析过程的工具,用于数据建模,将现实世界中的十五抽象成信息世界里的数据;2、数据库设计包括--概念设计、逻辑设计、物理设计概念设计:用户角度、E-R图;逻辑设计:E-R图转换成关系模式;物理设计:物理存储方法、索引等;3、数据库系统的三级模式概念模式(也叫做模式、......
  • yzy第六周学习笔记
    第六周学习笔记多任务处理在计算机技术中,多任务处理指的是同时执行几个独立的任务。在单处理器(单CPU)系统中,一次只能执行一个任务。多任务处理是通过在不同任务之间多路复用CPU的执行时间来实现的,即将CPU执行操作从一个任务切换到另一个任务。不同任务之间的执行切换机制称为上......
  • 第七周Linux教材第三章学习笔记——Unix/Linux进程管理
    Unix/Linux进程管理3.1多任务处理在计算机技术中,多任务处理指的是同时执行几个独立的任务。多任务处理是通过在不同任务之间多路复用CPU的执行时间来实现的,即将CPU执行操作从一个任务切换到另一个任务。不同任务之间的执行切换机制称为上下文切换,将一个任务的执行环境更改为另......