• 操作系统之用户级线程


    进程是既切换指令,同时也切换映射表(进程访问地址从映射表中获得),映射表对应的是内存,内存是程序执行所需的资源,需要用到的资源都存放在内存中

    进程=资源(映射表)+指令执行序列

    如 mov 100 ,在每个进程中都可以写,但是每个进程对应有自己的映射表,映射到物理内存中就不一样了,从而实现地址分离

    线程是只切换指令,不切换映射表,将资源和指令执行分开,只是切换了PC指针和部分寄存器,映射表没有切换

    所以说,线程既保留了并发的优点,又避免了进程切换的代价

    多个指令序列同时出发(creat函数),交替执行,用户级线程,要想交替执行,是主动调用函数,调用函数时,就是从一个函数切换到另一个函数(用yield函数切出去,交替执行)

    用yield完成切换

    TCB和栈相互配合,栈中的底端地址放在esp中,完成栈的切换。

    切换的时候只要切换栈就可以,PC指针已经被压入栈中,执行yield时,会自动弹栈。

    两个线程:有两个TCB(thread control block),两个栈,切换的PC在栈中

    一个栈,一个TCB与栈关联,栈里放着返回的地址

    ThreadCreat 核心:做出上面这三样东西,栈,TCB,TCB和栈关联

    void ThreadCreat (A)
    {
    TCB *tcb=malloc(); //申请一段内存作为tcb
    *stack=malloc(); //申请一段内存作为栈
    *stack=A; //在栈里填上程序的初始地址
    tcb.esp=stack; //栈和tcb关联

    }

    yield:用户级线程,完全是用户栈,没有进入到内核

    核心级线程(schedule):TCB在内核中,内核级线程并发性好一些

  • 相关阅读:
    C++第三章习题
    C++第五章习题
    C++第八章习题
    C++第四章习题
    第八章 图形编程 笔记
    第五章 Windows程序设计 笔记
    [转]c++ 结构体和类的区别
    C++第二章习题
    C++第六章习题
    Ubuntu10.04中设置和修改root密码
  • 原文地址:https://www.cnblogs.com/ymd12103410/p/9857228.html
Copyright © 2020-2023  润新知