免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1034 | 回复: 0
打印 上一主题 下一主题

进程结构 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-26 15:54 |只看该作者 |倒序浏览

1. 进程状态
进程从核心态返回用户态时,有可能被抢占,从而处于被抢占状态。
进程通过系统调用进入核心态运行时,若该系统调用是请求磁盘IO操作,则进程进入内存睡眠状态。IO完成后,中断程序唤醒该进程,则进入内存就绪状态。
用户进程可以发起系统调用,从而切换到”内核状态“,但不能控制何时从内核返回。
进程中的u区只能由正在运行的进程来存取。
2. 系统存储
进程逻辑段: text, data(全局变量), stack。编译程序在虚地址空间上生成地址。由存储管理部分将虚地址转换成物理地址。因此,编译程序不必知道内核以后会把程序装入内存的什么地方执行。
1) 区
几个进程可以共享一个正文区,但其数据区和栈区是各自私有的。
每个进程有一个私有的本进程区表pregion,指向一个区表项,并含有该区在进程中的其实虚地址。
2) page
存储管理硬件将物理存储器分为一些大小相等的块,成为页,大小512到4k字节。分配物理页不一定是连续的。
内核将区中的逻辑页号映射为机器上的物理页号。在一个程序中,区是连续的地址空间,逻辑页号可以作为物理页号数组的下标。
3) u区
每个进程有一个私有的u区,然而当内核访问u区时,就好像系统中只有一个u区,即正在运行的u区。
内核只要通过一个新地址重写u区页表地址项,就能引用另一个进程的u区。内核的正文和数据是由所有进程所共享的。
3. 进程上下文
进程上下文包括:
  • user-level context。包括进程正文、数据、用户栈、共享存储区。
  • regiester context。计数器、状态寄存器、栈指针、通用寄存器。
  • system-level context。即内核上下文,包括静态(进程表项、进程u区、本进程区表,区表决定进程的正文、数据、栈等区域),动态(进程核心栈、后进先出的context layer栈)
核心栈装有进程函数的调用序列。上下文层context layer处理中断中的context压入和弹出等。
一个进程在它的当前上下文层中运行。机器所能支持的中断级数目,限制了下下文层的数目。对于支持5中中断级的系统,一个进程最多可有7个上下文层:每个中断级共5个、系统调用一个、用户级一个。
4. 进程上下文保存
1)中断
中断发生时,处理过程为:
  • 保存(压入)——当前上下文层
  • 调用中断处理程序
  • 恢复(弹出)前一上下文层

2)系统调用
3)上下文切换
内核在以下四种情况下允许发生上下文切换:
  • 进程使自己进入睡眠
  • 从系统调用返回用户态但不是最有资格运行的进程
  • 在内核完成中断处理返回用户态但不是最有资格的进程
  • 推出(exit)
5. 进程地址空间的管理
allocreg 分配一个区数据结构,返回一个上锁的、已分配的区。
attachreg 将区附接到进程。在fork,exec期间,内核要使一个区和一个进程地址空间联系起来。
6. sleep和wakeup
在一个事件上睡眠,实际上是将一组时间映射到一组虚地址上,代表这些时间的地址被编码在内核中。
sleep将睡眠地址和优先级保存在进程表中,将进程放到睡眠进程的散列队列中。
wakeup对睡眠在输入的睡眠地址上的每个进程,将其状态置为就绪,并从睡眠进程队列移除,放到调度队列中。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/38597/showart_1744354.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP