计算机操作系统--哈工大

计算机操作系统--哈工大

打开计算机发生了什么?

一个扇区是512字节

0磁道0扇区是操作系统的引导扇区

取指执行

接口:连接两个东西,信号转换,屏蔽细节

系统调用的实践

DPL是用来描述目标内存段的特权值

CPL 当前的特权级

CPU进程

交替的三个部分:队列操作+调度+切换

多进程图像

进程一对地址100的写入会影响进程二的代码

解决办法:通过虚拟内存分离进程,分离地址。

进程管理连带内存管理形成多进程图像

给代码段上锁,以达成合理的进程推进顺序

在可能的执行序列里会造成错误,两个进程不可以随意的切换

学习目标

用户级线程

线程切换

比进程切换更快捷,不换资源

实质上是映射表不变而PC指针变

同时出发,交替执行

切换核心yield

yield是用户程序

会出问题的:

第一个线程里的yield执行后跳到第二个yield,204压栈,之后第二线程里的yield执行跳到第一个线程(不弹出栈),第一个执行完后见到‘}’,这个会编译成为一个ret,此时栈弹出一个地址 404,跳回到第二个线程

正确的:

应该去掉yield函数中的jmp,jmp跳出之后不会ret即不会弹出栈,从第二个线程跳回来之后204会执行两遍

用yield的右括号来实现弹栈

栈分离,每个线程用自己的栈,yield时先保存栈

可能的问题

用户级线程会出现的问题

进程阻塞后内核会进入别的进程,因为看不到线程。此时这个函数就是呈现一种卡住了的样子

此时虽然启动了多个线程,但是并没有用

核心级线程

核心级线程发生阻塞就可以有效地运行别的线程

ThreadCreate

内核级线程

多进程和用户级线程都无法在多核上起效果,因为多进程需要切换资源,而多核CPU只有一套MMU和Cache。用户级线程由于无法做系统调用到底层给OS分配硬件。

内核栈

切换线程的时候根据TCB切换一套栈

引起中断就会进入内核栈

进入内核栈时会首先将用户栈的SS SP EFLAGS IP CS入栈

IRET指令包含ret功能,还会将SS SP等弹出栈

开始内核中的切换 switch_to

用户栈进入内核栈,利用TCB找到切换目标内核栈,再根据内核栈IRET找到用户栈,运行结束后利用RET返回(思路和用户栈切换很像)

ThreadCreate

TCB tcb = get_free_page()开辟一段内存

*krlstack = 初始化内核栈

*userstack = 传入用户栈

用户级线程,核心级线程的对比

核心级线程实现实例(未学会 )

听不懂,还得看从实模式到保护模式,累了

等过一段时间回来把哈工大 核心级线程实现示例重新看一遍

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值