操作系统OS总结/入门

一、综述:

1.OS特征:并发,共享,虚拟,异步

2.OS功能(任务): 存储管理,文件管理,设备管理,提供用户管理接口,处理机管理(进程作业相关:进程和作业调度,进程控制,进程通信,进程同步)

二、进程

1.基本概念:

(1)进程定义
系统中正在运行的一个程序,程序一旦运行就是进程。可看成程序执行的实例

(2)区别线程:线程是进程的一个实体,是进程的一条执行路径

【进程切换慢, 线程切换快】
【进程需通过IPC通信,线程可直接读写共享的进程空间通信】
【进程间地址空间和其他资源相互独立,同一进程下线程共享】
【追求更安全稳定用进程,追求速度快多机响应用线程】

(3)进程状态:(创建)、等待、就绪、运行、(结束)

转化图:
在这里插入图片描述

(4)控制结构:

PCB(processing control block )进程控制块是用来表示进程状态的数据结构。
OS根据PCB进行进程控制管理。
存放描述进程情况的全部信息:

  1. 程序计数器:程序中下一条即将执行的指令地址
  2. 进程标识符:进程的唯一标识
  3. 进程状态
  4. 内存指针:相关数据存放在哪儿
  5. 进程上下文:记录上下文防止在进车给切换时丢失现场数据
  6. 优先级:用来区别调度顺序
  7. I/O信息:记录IO请求,分配的文件资源,外部设备
  8. 记账信息:时间限制、时间、记账号,方便记录管理

【PCB是进程在系统中的唯一标志】

2.进程控制:

(1)进程调度:

(补充:饥饿是指系统不能保证某个进程的等待时间上界,从而使该进程长时间等待,等待时间给进程推进和响应带来明显影影响。饥饿到一定程度的进程所赋予的任务即使完成也不再具有实际意义时称该进程被饿死。)

5种常见调度算法:FCFS(先到先服务)、SJF(短作业优先)、RR(时间片轮转)、最高优先权优先、多级反馈队列

  1. FCFS先到先服务:按照进程到达顺序,依次执行,上一个进程执行完后下一个进程执行。即每次处理最先进入队列的进程分配资源执行,直到被迫中止或执行完毕。缺点:平均等待时间长;适用于CPU繁忙型,不适用IO繁忙型;可能造成饥饿(因为FCFS中进程一旦获得CPU开始执行就会一直执行,长进程后的进程可能饥饿)
  2. SJF短作业优先:每次选择就绪队列中估计运行时间最短的进程分配资源执行,知道被迫中止或执行完毕。缺点:完全没考虑进程的紧迫程度总是先执行时间最短的;对短进程有利,对长进程不利;可能造成饥饿(因为总是执行时间短的,长进程可能饥饿)
  3. RR时间轮转法:每次依次取就绪队列中的进程执行一个时间片,当时间片结束执行队列中下一个进程。优点:可响应多用户操作;不会造成饥饿(因为保证了一段时间内每个进程都能得到一时间片的执行,所以可在规定时间内响应)
  4. 多级反馈队列:多个不同优先级的就绪队列,为每个队列规定不同长度的时间片,优先级高的时间片长。CPU只依次取最高优先级就绪队列中的进程执行,若最高优先级级为空,才执行次优先级队列,依次向后类推。进程进入内存后先进入最高优先级就绪队列,按照RR时间轮转算法执行,若在执行的第一个时间片内未执行完毕,该进程进入次优先级就绪队列的末尾排队等待下一次执行。若当前CPU正在处理第i+1优先级队列,有新进程进入1~i队列,则新进程抢占CPU,原未处理完的进程排至第i+1队列的末尾。公认较好的算法

(2)进程控制:

主要需要弄清楚父子进程的关系,并通过命令或程序语言操作进程,如创建进程、创建子进程、杀死进程、查看进程情况…

子进程通过fork()函数创建,父子进程(子进程产生之初)代码、数据、堆栈相同,仅时间和ID不同。父子进程并发执行,互不影响,执行顺序随机不能确定谁先谁后。fork()函数在父进程中返回新子进程的ID号,在子进程中返回0。可通过fork()返回值区分父子进程。

常用控制语句:

  1. pid_t pid = fork();创建进程。调用fork()的为父进程,fork()创建的为子进程。
  2. wait(null); 父进程用wait()在此处暂停等待所有子进程执行结束,再继续向下执行。

fork()函数执行过程:

//文件名为fork_2.c
int main(void)
{
    pid_t pid;
    pid = fork();
    
    if(pid == 0)
    {
        printf("pid == 0\n");
    }
    else
    {
        printf("pid != 0\n");
    }

    return 0;
}

以上代码产生子进程,区分一下父子进程的执行过程分别为:
在这里插入图片描述(3)进程通信

A.5种通信方法

  1. 共享内存:共享某块内存。OS建立一块共享内存,映射到共享的进程地址空间。在这里插入图片描述
  2. 套接字socket:可用于不同机器的进程通信。
  3. 消息队列:用类似链表的方式存储消息。进程共享消息队列中的内容。(kafka就是通过消息队列实现进程通信的一种常用的服务)
  4. 管道:3种管道:无名管道、流管道、命名管道FIFO。类似于一种特殊的文件(并不是),它存在于内存中,进程可以对它进行读写,它提供流控制,保证进程的正确读写,即管道为空时读进程会阻塞,管道为满时写进程会阻塞。
  5. 信号量:是一个计数器,常作为一种锁机制,用于解决进程间的同步与互斥

B.通信中的问题:同步与互斥

同步与互斥是说进程在协同工作时又存在相互制约

基本概念:

  • 临界资源:每次只允许一个进程访问的资源
  • 临界区:代码中访问临界资源的部分
  • 进入区:检查进程可否进入自己的临界区的代码,如可访问,设置正在访问临界区的标志
  • 退出区:清除正在访问临界区的状态
  • 剩余区:代码中除临界取、进入区、退出区的代码
  • 互斥:一个进程占用资源,其他进程不能使用,必须等待适应资源的进程释放
  • 死锁:多个进程各占用部分资源,形成循环等待
  • 饥饿:其他进程可能轮流占用资源,一个进程一直得不到资源
  • 同步:多个进程协同工作,互斥、死锁、饥饿都是可能产生的问题

互斥机制:

通过限制进程访问临界区答到互斥

访问临界区规则:

  • 空闲则入
  • 忙则等待
  • 有限等待
  • 让权等待

=============================================================

参考:
https://www.cnblogs.com/UnfriendlyARM/p/10111083.html
https://blog.csdn.net/b9x__/article/details/80300224
https://www.jianshu.com/p/7e522f3619fc

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值