首页 > 其他分享 ># 20211301 学习笔记6

# 20211301 学习笔记6

时间:2023-10-21 15:57:38浏览次数:30  
标签:fork pid 笔记 学习 管道 20211301 printf 进程 执行

20211301 郑润芃 学习笔记6

第三章教材知识总结

3.1 多任务处理

  • 多任务处理:指同时进行几项独立活动的能力

  • 单CPU : 一次只能执行一个任务

  • 多任务处理:通过不同任务之间多路复用CPU的执行时间

  • 上下文切换:不同人物之间的执行切换机制

  • 并发:逻辑并行性

3.2 进程的概念

  • 进程:对映像的执行

  • 执行映像:包含执行代码、数据和堆栈的存储区

  • PROC 结构体:

名称 功能
next 在各种动态数据结构中维护PROC结构体
ksp 保护堆栈指针
pid 表示进程ID编号
ppid 父进程id编号
status 进程当前状态
kstack 进程执行的堆栈

3.8 进程管理的系统调用

  • fork:创建子进程,返回子进程的pid 失败则返回-1
    • 左侧显示pi映像,在Umode下发出系统调用pid=fork()
    • pi转到Kmode执行内核中响应的kfork()函数
    • 创建完子进程后,Pi返回语句
    • 子进程Pj运行时,会退出Kmode并返回相同语句

  • 进程执行顺序:顺序由优先级决定,可以轮流进行

  • 进程终止:有两种方式

    1. 正常终止:exit()函数执行清理工作,发出_exit(value)系统调用,退出值0表示正常终止。通知父进程。
    2. 异常终止:遇到非法指令、越权、除零等错误,内核异常处理程序将陷阱错误类型转换为一个信号。
  • 等待子进程终止:任何时候都可以使用系统调用等待僵尸子进程

  • subreaper进程:处理孤儿进程

  • exec():更改进程的执行映像

  • argv[]布局

  • 环境变量:为当前sh定义的变量,由子sh或进程继承

3.9 I/O 重定向

  • 文件流:每个文件流对应linux内核中的一个打开文件,每个打开文件都用一个文件描述符表示

  • 重定向标准输入:close系统调用会关闭文件描述符0,open打开文件,使用最小的未使用描述符数值作为文件描述符

3.10 管道

  • 管道:用于进程交换数据的单向进程间通信通道,有一个读取端和写入端

  • 双向管道:可以双向传输

  • 命名管道:不相关进程之间的FIFO通信通道

  • 管道编程:内核中创建管道,并返回两个文件描述符,一个读取一个写入

  • 管道命令处理:cmd1 | cmd2

  • 管道写进程和管道读进程连接起来:查看是否有|符号 执行代码重定向

  • 命名管道:FIFO

代码实现

  • fork()演示
#include <stdio.h>
#include <unistd.h>

int main()
{
    int pid;
    printf("this is %d, my parent=%d\n", getpid(), getppid());
    pid = fork();
    if (pid) {
        printf("this is process %d, child pid=%d\n", getpid(), pid);
    } else {
        printf("this is process %d, parent=%d\n", getpid(), getppid());
    }
    return 0;
}

  • 打印环境变量
#include <stdio.h>
#include <stdlib.h>

// 声明全局变量environ,用于访问环境变量
extern char** environ;

int main(int argc, char* argv[]) {
    int i;
    char* env;

    // 打印命令行参数
    printf("Command Line Arguments:\n");
    for (i = 0; i < argc; i++) {
        printf("%s\n", argv[i]);
    }

    // 打印环境变量
    printf("\nEnvironment Variables:\n");
    while (*environ) {
        printf("%s\n", *environ);
        environ++;
    }

    return 0;
}

苏格拉底提问

  • 进程





  • 管道




问题与解决方案

  • 问题1:书上演示fork()的代码无法执行

  • 问题解决方案:询问了chatgpt,找到了解决方案

标签:fork,pid,笔记,学习,管道,20211301,printf,进程,执行
From: https://www.cnblogs.com/pengqiqi/p/17778859.html

相关文章

  • 学习笔记6
    第三章.Unix/Linux进程管理多任务处理:指的是同时几项独立活动的能力是所有操作系统的基础,是并行编程的基础进程的概念:进程是对映像的执行在操作系统中,每个进程用一个独立的数据结构表示,叫进程控制块(PCB)和任务控制块(TCB)。本书中称为PROCtypedefstruct......
  • 学习笔记6
    第3章Unix/Linux进程管理一、知识点归纳多任务处理同时进行几项独立活动的能力通过在不同任务之间多路复用CPU的执行时间来实现,即将CPU执行操作从一个任务切换到另一个任务“并发”所有操作系统的基础并行编程的基础进程的概念进程是对映像的执行。PROC结构体U......
  • 《Unix/Linux系统编程》教材学习笔记第三章
    chapter3多任务处理一般来说,多任务处理指的是同时进行几项独立活动的能力。在计算机技术中,多任务处理指的是同时执行几个独立的任务。在单处理器(单CPU)系统中,一次只能执行一个任务。多任务处理是通过在不同任务之间多路复用CPU的执行时间来实现的,即将CPU执行操作从一个任务切换到......
  • 开发笔记
    开发笔记环境配置类0.杂项配置M1Mac的python环境:M1miniconda,需要用哪些包先去https://anaconda.org/查询是否只是M1芯片,不支持的貌似安装不了(比如pygame)直接用Pycharm的新建环境,不过不知道下载的是M1版本的还是通过Rosetta转译的。关于jupyternotebook:在base环境......
  • 捡起ctf学习 day1 Linux Labs
    1.把忘记密码的kali重置了密码进入GRUB启动程序,修改命令,重置密码(参考https://www.cnblogs.com/wh0915/p/17153270.html) 2.做题,ssh连接命令ssh-p端口用户名@网址然后输入密码即可连接 cd命令:切换当前目录百至其它目录,比如进入/etc目录,则执行cd/etccd/:在Linux系......
  • 学习笔记6
    知识点归纳多任务处理系统多任务处理系统是一种计算机操作系统,可以同时执行多个任务或进程,从而提高计算机的效率和吞吐量。它允许用户在一个系统中运行多个程序,并且这些程序可以并行执行,互不干扰。多任务处理系统有两种类型:协作型和抢占式。在协作型系统中,多个任务共享CPU的时......
  • 2023-2024-1 20231317《计算机基础与程序设计》第四周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2023-2024-1计算机基础与程序设计第四周作业)这个作业的目标<《C语言程序设计第三章》>作业正文...本博客链接https://www.cnblogs.com/......
  • 2023-2024-1 20231404高伟光 《计算机基础与程序设计》第四周学习总结
    作业信息所属班级计算机基础与程序设计作业要求要求作业目标学习并总结课本,通过测试作业正文本博客教材学习内容总结1.学习了门与电路的相关知识,了解了相关运算与图解2.知道大多计算机为冯-诺伊曼体系3.学习了强转,了解计算机赋值逻辑和晕算符号教材学......
  • TCL脚本语言学习
    前言  TCL(ToolCommandLanguage)命令的格式是命令+字符串,第一个是命令,后面都是字符串,tcl的解释器(逐行执行)会根据命令去对后面的字符串进行相关操作。注释符号:#一、安装启动tcl命令行,以%开头sudoaptinstalltcl//安装tcltclsh//启动tcl%二、变量列表1、置换subtitutio......
  • Unix/Linux系统编程自学笔记-第三章:Unix/Linux进程管理
    Unix/Linux系统编程自学笔记-第三章:Unix/Linux进程管理1、概念介绍多任务处理计算机技术概念中的多任务处理指的是同时执行若干独立任务。无论是在多处理机系统还是单处理机系统都可以实现多任务处理。对于单处理机系统,多任务处理的实现依靠着多路复用技术,通过上下文的快速......