程序控制块

1. 程序控制块

从代码上看,程序控制块就是一个结构体.例如:


typedef struct tcb{
char * tast_name; //任务名字
int p; //任务重要级别
int v_number; //版本号
void (*fun)(void); //指向存储任务代码空间地址
}TCB;

操作系统可以通过这个结构体控制与之相关联的代码,因此把这种结构叫做程序控制块.

例子:


#include <stdio.h>
#include <string.h> //TCB定义
typedef struct tcb{
char * task_name; //任务名字
int p; //任务重要级别
int v_number; //版本号
void (*fun)(void); //指向存储任务代码空间地址
}TCB; //任务1
void Task1()
{
int i;
for (i=0; i<10; i++)
printf("1111111111\n");
} //任务2
void Task2()
{
int i;
for (i=0; i<10; i++)
printf("222222222222\n");
}
//任务3
void Task3()
{
int i;
for (i=0; i<10; i++)
printf("3333333333333\n");
}
//创建控制块函数
TCB GreatTCB(char *name, int pp, int vnum, void (*f)())
{
TCB tcb;
tcb.task_name = name;
tcb.p = pp;
tcb.v_number = vnum;
tcb.fun = f;
return tcb;
} //主任务
int main()
{
char name_buf[10];
int t, i; //定义TCB数组大小
TCB tcbTbl[3]; //创建task
tcbTbl[0] = GreatTCB("task1", 2, 1, Task1);
tcbTbl[1] = GreatTCB("task2", 3, 4, Task2);
tcbTbl[2] = GreatTCB("task3", 4, 4, Task3); printf("Input task name: ");
gets(name_buf); t = 0;
//seek
for (i=0; i<3; i++)
{
if (strcmp(tcbTbl[i].task_name, name_buf) == 0)
{
tcbTbl[i].fun();
t = 1;
} if (i == 2 && t == 0)
printf("No %s\n", name_buf);
}
return 0;
}

2. 控制块链表

为了方便管理和组织程序控制块,一版在TCB中再定义两个指针,一个前指针, 一个后指针,用于把TCB组织起来,方便管理; 并且当程序控制块数组过大时,还会单独定义一个数组,数组的各个元素分别按照顺序指向程序控制块链表,这样做的目的是为了提高程序运行速度,因为链表查询很耗时.

最新文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统 (源码购买说明)
  2. 鱼搜_鱼搜官网_鱼搜搜索_http://www.7yusou.com
  3. Android 2016新技术
  4. 设置secureCRT的鼠标右键为弹出文本操作菜单功能
  5. Linux命令之dos2unix
  6. IOS第一天多线程-01pthread
  7. UploadifyAPI-上传插件属性和方法介绍
  8. [Akka]发送一条消息的内部流程
  9. javascript中的screen对象
  10. jupyter巨好玩-调试代码自动变文档
  11. mysql错误提示不是英语的解决办法
  12. iOS中怎样加入自己定义的字体
  13. 王立平--Failed to push selection: Read-only file system
  14. springboot(十四):springboot整合shiro-登录认证和权限管理
  15. Spring security csrf实现前端纯html+ajax
  16. 浅析nodeJS中的Crypto模块,包括hash算法,HMAC算法,加密算法知识,SSL协议
  17. 第一册:lesson seventy three.
  18. jconsole使用
  19. tailor+ skipper 实现micro-frontends 简单试用
  20. java1.8 版本改成 java1.7版本

热门文章

  1. mac 破解photoshop cs6
  2. 算法之美--2.2 Array
  3. Android之——流量管理程序演示样例
  4. hdu2222Keywords Search字典树入门……
  5. android开发笔记之fastboot的使用
  6. HDOJ2084数塔问题
  7. easy ui 自己主动生成accordion不能自适应父容器问题
  8. dede频道标签channel和频道内容标签channelartlist的调用栏目名的不同方式,如果错误使用标签会发生错误
  9. XMPP资源绑定(Resource Binding)
  10. ios美颜 调研 GPUImage GPUImageBeautifyFilter BeautifyFaceDemo