【OS】课设记录总结+进程整理

进程

1.定义:程序是一个指令序列;

PCB:进程控制块,用来描述进程的各种信息,进程代码的存放位置;

PCB,程序段,数据段构成进程的实体(进程映像)

程序段、数据段、PCB三部分组成了进程实体(进程映像)。

一般情况下,我们把进程实体就简称为进程例如,所谓创建进程,实质上是创建进程实体中的PcB;而撤销进程,实质上是撤销进程实体中的PCB

注意:PCB是进程存在的唯一标志

从不同的角度,进程可以有不同的定义,比较传统典型的定义有:

  1. 进程是程序的‘一次’执行过程
  2. 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
  3. 进程是具有独立功能的程序在数据集合上运行的过程,它是系统进行资源分配调度的一个独立单位

引入进程实体的概念之后,进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。

注意:严格来说,进程和进程实体是不一样的,实体是静态的,进程则是动态的,

PCB:操作系统通过PCB来管理进程,因此PcB中应该包含操作系统对其进行管理所需的各种信息。

程序段:程序代码存放位置;

数据段:程序运行时使用,产生的运算数据。如全局变量,局部变量,宏定义的常量,就是存放在数据段;

介绍PCB:

  1. 进程描述信息

    • 进程标识符PID
    • 用户标识符UID
  2. 进程控制和管理信息

    • 进程当前状态
    • 进程优先级
  3. 资源分配清单

    • 程序段指针
    • 数据段指针
    • 键盘
    • 鼠标
  4. 各种寄存器值:当进程切换是需要把进程当前运行情况记录下来保存在PCB中,程序计数器的值表示当前程序执行到哪一句;

2.进程的组织:在一个系统中,通常有数十、数百乃至数千个PCB。为了能对他们加以有效的管理,应该用适当的方式把这些PCB组织起来。

注:进程的组成讨论的是一个进程内部由哪些部分构成的问题,而进程的组织讨论的是多个进程之间的组织方式问题

进程的组织方式:

1.链接方式:

  • 按照进程状态将PCB分为多个队列

  • 操作系统持有指向各个队列的指针

2.索引方式:

  • 根据进程状态的不同,建立几张索引表
  • 操作系统持有指向各个索引表的指针
    !![](https://img-blog.csdnimg.cn/2021031909175560.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pjdzEyMzQ1MTU=,size_16,color_FFFFFF,t_70)![](https://img-blog.csdnimg.cn/20210319091811117.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pjdzEyMzQ1MTU=,size_16,color_FFFFFF,t_70)

进程的特征:

  1. 动态性:进程是程序的一次执行过程,动态产生,变化和消亡;是进程最基本的特征
  2. 并发性:内存中有多个进程实体,各个进程可以并发执行;
  3. 独立性:进程是能够独立运行的,独立获得字样,独立接受调度的基本单位(进程)
  4. 异步性:各进程按各自独立的,不可预知的速度向前推进,操作系统要提供进程同步机制来解决异步问题
  5. 结构性:每个进程都会分配一个PCB。结构上是由PCB,数据块,程序块组成;

课程设计–Linux二级目录设计

  • 使用C语言在linux系统下实验;
  • 使用C++在window下模拟系统实验;

C知识点:

C语言学习网站:

C语言

  1. fprintf() 和 printf() 之间的区别

    fprintf是将字符输出到流(文件)的,printf是输出到标准输出设备(stdout)的,一般就是我们的屏幕。
    如果使用fprintf(stdout, “”) ;相当于指定输出到设备也就与printf() 相同了;

  2. 求长度

    **strlen(str)   //C
    len(str)            #python
    length(str)      %matlab**
    
  3. 输入函数

    scanf("%d",len);  //C
    input(len); #python
    cin<<len; //C++
    

linux 底层C函数

IO函数
  • open()

    头文件 #include <sys/types,h> #include<sys/stat.h> #include<fcntl.h>

    函数定义: int open(const charpathname, int flags)
    int open(const char
    pathname, int flags, mode_t mode); 参数flags 所能使用的参数旗标:

    在这里插入图片描述在这里插入图片描述
    返回值:只要有一个权限被禁止返回-1,否则返回 0

  • dup() 复制文件描述符

    头文件 include <unistd.h>

    函数定义:int dup(int oldfd ) dup()用来复制参数oldfd 所指的文件描述符,并返回,共享所有锁定,读写位置和各项权限和旗帜,

  • close()

    头文件 #include <unistd.h>

    函数定义:int close(int fd) 参数fd为先前创建文件时候的文件描述符;
    返回值:顺利关闭 return 0; 发生错误返回-1;

  • read()

  • write()

  • lseed() 操作文件指针

shmat(shmid, 0, 0);

shmget(shmid, 0, 0);

signal(SIGUSR2, dealExit);

lockf(1,1,0)

getpid()

gets()

strstr()

C++知识点

  1. VS 编译安全问题,解决strcpy等不安全

解决方法:

(打开)
项目->属性->C/C+±>预处理器->预处理器定义
(添加)
_CRT_SECURE_NO_DEPRECATE
_CRT_NONSTDC_NO_DEPRECATE

posted @ 2022-05-02 19:41  jucw  阅读(53)  评论(0编辑  收藏  举报