03-处理机调度
概念
调度:就是指有一堆任务需要处理,但是由于资源有限,不能同时处理,这就需要某种规则来就决定处理
任务的顺序,调度就是用于安排处理顺序的。
处理机调度:就是从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程的并发
执行
调度的三个层次:
高级调度(作业调度)
目的:由于内存空间有限,有时无法将用户提交的作业全部放入内存,因此就需要确定某种规则来决定 将作业调入内存的顺序
定义:按照一定的原则从外存上处于后备队列的作业中挑选一个或多个作业,给他们分配内存等必要资 源并建立相应的进程(建立PCB),以使它们获得竞争处理机的权力
高级调度是外存和内存之间的调度,每个作业只调入一次,调出一次。作业调入时会建立相应的PCB,作业调出时才会撤销PCB。
注意:高级调度主要是指调入问题,因为调入时间由操作系统确定,调出只有在作业运行结束才调出
中级调度(内存调度)
再引入虚拟存储技术之后,可以将暂时不需要执行的进程调至外存,等到它具备运行条件且内存又有空间 的时候,再重新调入内存。这么做的目的是为了提高内存的利用率和系统的吞吐量
调到 ...
02-线程与进程
1.进程的定义,组成,组织与特征
1. 进程的定义
* 程序:就是一个指令序列
* 单道程序:内存中只有一道程序
* 多道程序:内存中同时存入多道程序
* 为了方便操作系统管理,完成各程序并发执行,引入进程,进程实体概念。
* 系统为每个程序配置一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码放置的位置)
定义:进程实体(进程映像)由PCB,程序段,数据段三部分组成。一般情况下,我们把进程实体就简称为进程。例如:所谓
创建进程,实质上是创建进程实体中的PCB,而撤销进程,实质上是撤销进程实体中的PCB
* 注意:PCB是进程存在的唯一标志
* 三种进程的定义:(都在强调动态性)
1. 进程是程序的一次执行过程
2. 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
3. 进程是具有独立功能的程序在数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
总而言之, ...
01-操作系统基本概念
1.概念
* 计算机系统的层次结构
从低到高:裸机,操作系统,应用程序,用户
* 定义:
操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织调度计算机的工作和资源的分配,
以提供用户和其他软件方便的接口和和环境,它是计算机系统中最基本的系统软件。
* 注意:打开任务管理器快捷键:ctrl + alt + del + 选择 / ctrl + shift +esc
功能和目标
作为系统资源的管理者:
功能:
处理机管理:如QQ程序的正常运行,对应的进程需要被处理机(CPU)处理
存储器管理:如运行QQ程序时,需要将该程序相关的数据加载进内存
文件管理:如在文件夹中找到相应的可执行性程序的位置
设备管理:如QQ视频聊天时,需要将摄像头分配给进程
目标:安全和高效
作为用户和计算机硬件之间的接口:
功能:
命令接口:允许用户直接使用
联机命令接口:用户说一句,系统做一句
脱机命令接口:用户说一堆,系统做一堆
程序接口:允许用户通过程序间接使用,由一种系统调用组成,可以理解为系统调用等于程序接口 ...
PRG7.字符串左右匹配
设计一个函数 int bracketmatch(char* str) 该函数的功能判断由str字符串所给出的表达式里圆括号、方括号、花括号是否合法,也就是左右匹配。对其它字符符合不做任何判断。(1 + 35)) 不合法;[3] + {444} - [(333)]合法;{ 1 + [233 } - ]不合法;合法返回1,不合法返回0
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145#incl ...
PRG6.两个多项式链表相加
设计一个函数 void add_poly(Polylist pa, Polylist pb) ,其功能是pb和pb的多项式进行相加。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135#include <stdio.h>#define NULL 0//其中Po ...
无题
单片机原理及应用第1章 单片机概述1.1单片机的概念及主要特点
简称单片微型计算机,是指在一块半导体芯片中集成中央处理器、存储器、基本I/O接口以及定时/计时器等必要部件的完整的微型计算机
1.2单片机的分类及发展趋势
1.2.1单片机发展现状
1.8位单片机
51及兼容型、非51型
2.16位单片机
MSP430,特点:省电、超低功耗
3.32位单片机
代表产品RISC的ARM系列
1.2.2单片机的发展趋势
1.类型上
51单片机主频:12MHz、24MHz、6MHz
2.技术发展上
1)CPU核仍以CISC为主,但朝RISC演化
2)采用闪烁(Flash)或E²PROM存储器替代内EPROM
3)低功耗、低电压、低价位,如CPU部分工作于1.5~2.5V、I/O口工作于3.3~5V
1.3常见的主流单片机
1.3.1目前流行的51内核单片机
1.Intel公司的MCS-51系列单片机
MCS-51子系列和MCS-51子系列
2.Atmel公司的89系列单片机
具有E²PROM可擦除技术、Flash存储器技术和优秀的生产工艺与 ...
I am back!
Because of my laziness these days, I didn’t update the content. And unfortunately the computer had a problem a few days ago, which caused the system reinstalled, so I just redeployed it now. But I promise I will keep updating it in the next days.
PRG5.合并两个非递减有序链表
设计一个函数 void merge(List La, List Lb) , 其功能是将Lb合并到La中,其中La和Lb的元素均为非递减有序排列,且合并后的La的元素也为非递减有序排列。
//非递减有序排列即关键字递增序排列,但是并非单调递增(因为有重复的关键字)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576#include <stdio.h>#include <stdlib.h>//其中List是如下结构体:typedef struct T_Node { int d; struct T_Node* next;} Node, * List;/*设计一个函数 void merge(List La, List Lb)其功能是将Lb合并到La中,其中La和Lb的元素均为非递减有序排列,且合并后的La的元素也为非递 ...
PRG4.删除顺序表中所有值为某数的元素
设计一个函数void delitem(SEQTABLE* st, int item)在顺序表st中,删除值为item的所有元素,要求算法复杂度为O(n)。函数中只能有一个循环语句。
1234567891011121314151617181920212223242526272829303132333435363738394041424344#include <stdio.h>#define MAX 20/*设计一个函数void delitem(SEQTABLE* st, int item)在顺序表st中,删除值为item的所有元素,要求算法复杂度为O(n)。函数中只能有一个循环语句。*///其中SEQTABLE是如下结构体:typedef struct { int n; //顺序表元素个数 int data[MAX + 1]; //存放元素的数组,下标从1开始} SEQTABL ...
PRG3.将带头结点的链表逆转
设计一个函数 void LinkReverse(List* pla) , 其功能将带头结点的单向链表反转。la是一个带头结点的链表,函数的目的是逆转这个链表,也就是第一个结点变成最后一个结点,第二个结点变为倒数第二个结点,以此类推。该函数的空间复杂度为O(1),也就是该函数不能定义数组变量和使用动态分配函数。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465#include <stdio.h>#include <stdlib.h>/*设计一个函数void LinkReverse(List* pla)其功能将带头结点的单向链表反转。la是一个带头结点的链表,函数的目的是逆转这个链表,也就是第一个结点变成最后一个结点,第二个结点变为倒数第二个结点,以此类推。该函数的空间复杂度为O(1),也就是该函数不能定义数组变量和使用动态分配函数。*/ //其中List是如下结构体:typ ...