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

学习笔记6(第三章)

时间:2023-10-21 21:46:34浏览次数:32  
标签:char 第三章 文件 int 笔记 学习 进程 const 执行

一、知识点归纳

(一)知识点内容

教材学习内容总结

本章主要讨论Unix/Linux中的进程管理。讲述了多任务处理,以及进程的相关知识:进程的概念;进程创建、终止。还讲到了Unix/Linux进程管理的系统调用:fork() wait() exec() exit()

第一节:多任务处理

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

多任务处理系统

type.h文件

type.h文件定义了系统常数和表示进程的简单PROC结构体。

ts.s文件

ts.s在32位GCC汇编代码中可实现进程上下文切换。

queue.c文件

queue.c文件可实现队列和链表操作函数。
enqueue()函数按优先级将PROC输入队列。在优先级队列中,具有相同优先级的进程按先进先出(FIFO)。
dequeue()函数可返回从队列或链表中的第一个元素。printlist()函数可打印链表元素。

t.c文件

t.c文件定义MT系统数据结构、系统初始化代码和进程管理函数。

第二节:进程

(1)进程的概念

操作系统是一个多任务处理系统。在操作系统中,任务也称为进程。在实际应用中,任务和进程这两个术语可以互换使用。

进程的正式定义:进程是对映像的执行。

(2)进程同步

进程同步是指控制和协调进程交互以确保其正确执行所需的各项规则和机制。

最简单的进程同步工具是休眠和唤醒操作。

睡眠模式:

有时候,进程需要等待直到某个特定的事件发生,例如设备初始化完成、I/O 操作完成或定时器到时等。
在这种情况下,进程则必须从运行队列移出,加入到一个等待队列中,这个时候进程就进入了睡眠状态。
为实现休眠操作,我们可以在 PROC 结构体中添加一个event字段,并实现ksleep(int event)函数,使进程进入休眠状态。

进程睡眠状态有两种:

  • 一种是可中断的睡眠状态,其状态标志位TASK_INTERRUPTIBLE
  • 另一种是不可中断的睡眠状态,其状态标志位为TASK_UNINTERRUPTIBLE

唤醒操作:

当某个等待时间发生时,另一个执行实体(可能是某个进程或中断处理程序)将会调用 kwakeup(event)。
唤醒正处于休眠状态等待该事件值的所有程序。
如果没有任何程序休眠等待该程序,kwakeup()就不工作,即不执行任何操作。

(3)进程终止

正常终止:

进程调用exit(value),发出_exit(value)系统调用来执行在操作系统内核中的kexit(value)。

异常终止:

进程因某个信号而异常终止。

第三节:I/O重定向

(1)文件流和文件描述符

每个文件流都是指向执行映像堆区中FILE结构体的一个指针。每个文件流对应Linux内核中的一个打开文件。每个打开文件都用一个文件描述符(数字)表示。

(2)文件流I/O和系统调用

当进程执行库函数

scanf("%s", &item);

它会试图从stdin文件输入一个(字符串)项,指向FILE结构体。如果FILE结构体的fbuf[]

第四节:管道

管道是用于进程交换数据的单向进程间通信通道。管道有一个读取端和一个写入端。可从管道的读取端读取写入管道写入端的数据。

(1)管道命令处理

在Unix/Linux中命令行

cmd1 | cmd2

包含一个管道符号 “ | ” 。

(2)命名管道

命名管道又叫做FIFO。它们有“名称”,并在文件系统中以特殊文件的形式存在。

示例:
①在sh中,通过mknod命令创建一个命令管道:
②或者在C语言中发出mknod()系统调用
③进程可像访问普通文件一样发个文命名管道。

第五节:Unix/Linux进程管理中的系统调用

(1)fork()

函数原型:

pid_t fork(void);

(pid_t 是一个宏定义,其实质是int 被定义在 #include <sys/types.h> 中)
返回值:若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1。

在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。

在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。通过fork返回的值来判断当前进程是子进程还是父进程。

(2)等待()

函数原型:

int wait(int *status);

父进程一旦调用了wait就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。

(3)执行()

函数原型:

#include <unistd.h>
int execl(const char *pathname, const char *arg0, ... /* (char *)0 */ );
int execv(const char *pathname, char *const argv[] );
int execle(const char *pathname, const char *arg0, ... /* (char *)0, char *const envp[] */ );
int execve(const char *pathname, char *const argv[], char *const envp[] );
int execlp(const char *filename, const char *arg0, ... /* (char *)0 */ );
int execvp(const char *filename, char *const argv[] );
返回值:六个函数的返回值,若出错则返回-1,若成功则不返回值。

(二)苏格拉底挑战

1、知识点一


2、知识点二


二、问题与解决思路

(一)问题

在64位的乌班图系统中,无法直接使用gcc -m32 t.c ts.s指令进行32位的编译

type.h

ts.c

queue.c

t.c

(二)解决


三、实践过程

(一)exit函数:

(二)env

标签:char,第三章,文件,int,笔记,学习,进程,const,执行
From: https://www.cnblogs.com/20211125mjz/p/17779591.html

相关文章

  • 提高组算法-图论学习笔记
    ##2023-10-21第一节基本概念      一、什么是图:点用边连起来就叫做图,是一种数据结构。二、图的一些定义和概念1、有向图:图的边有方向,只能按箭头方向从一点到另一点。  2、无向图:图的边没有方向,可以双向。3、结点的度:无向......
  • 学习一年java思想总结
    如果你迷茫不妨看看我的思想总结java这门语言是一门非常厉害的,期初我是学python的越往后学,我就感觉不是特别喜欢。然后某天晚上我打开以前的java的一个简单项目。突然就喜欢上了,下定决心去学java。我先开始学的java基础。还是那就话java入门简单深入难,刚开始学基础语法......
  • 范里安微观经济学第九版学习笔记
      浅浅分享以记录自己的学习步骤,挑战自己的认知。......
  • esp32笔记[8]-rust的定时器中断点灯
    摘要使用rust开发esp32c3实现定时器中断点亮led灯.超链接esp32笔记[7]-使用rust+zig开发入门平台信息esp32c3rustMutex锁usecore::cell::RefCell;usecritical_section::Mutex;//no-std库专用的Mutex我们首先注意到的是静态变量BUTTON。我们需要它,因为在中断处理程......
  • 动手学深度学习--第三方库的学习
    frompixivPandasCreating,ReadingandWritingpandas中有两类实体类:theDataFrameandtheSeries.DataFrameADataFrameisatable.SeriesASeries,bycontrast,isasequenceofdatavalues.一般我们在读取的时候都是用DataFrame类进行装载数据ind......
  • windows下的深度学习环境软件版本(cuda/cudnn/pytorch)
    为了方便多个深度学习框架的环境配置,推荐使用anoconda进行搭建。1.anaconda/miniconda下载地址anacoonda官方下载地址:FreeDownload|Anacondaminiconda官方下载地址: LatestMinicondainstallerlinksbyPythonversion—minicondadocumentation清华镜像源的下载地......
  • 《信息安全系统设计与实现》第七周学习笔记
    《信息安全系统设计与实现》第七周学习笔记第三章Unix/Linux进程管理多任务处理一般来说,多任务处理指的是同时进行几项独立活动的能力。在计算机技术中,指的是同时执行几个独立的任务。多任务处理是所有操作系统的基础,总的来说,它也是并行编程的基础。进程的概念进程是对映......
  • docker 学习
    =前言1.安装及环境1.1.Linux安装1.2.Windows安装2.初识Docker2.1.进入dockerhttps://www.cnblogs.com/xhyan/p/6593075.2.2.命令行基本操作安装依赖yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2Docker实例Docker安装CentosCentOS镜像库地址:https......
  • SQL语句的学习
    函数查询之时间函数时间获取时间处理时间计算等等获取当前的时间SELECTNOW(),CURRENT_DATE(),CURRENT_TIME(),CURRENT_TIMESTAMP(),CURTIME(),SYSDATE()获取时间信息SELECTYEAR(NOW()),MONTH('2023-07-17'),DATE(NOW()),DAY(NOW()),HOUR(NOW()),MINUTE(NOW()),SECOND(NOW()......
  • Mysql死亡笔记的死锁记录
    死锁记录线上MySQL死锁了,我赶紧登录线上系统,查看业务日志。能清楚看到是这条insert语句发生了死锁。MySQL如果检测到两个事务发生了死锁,会回滚其中一个事务,让另一个事务执行成功。很明显,我们这条insert语句被回滚了。insertintouser(id,name,age)values(6,'张三',6);但是......