软考中级怎么复习学习

软考中级怎么复习学习,哔哩哔哩+刷题??1,要多久时间!@#¥123123123123123123123软考中级怎么复习学习,哔哩哔哩+刷题

下载软考通软件,刷几套往年真题就可以了

刷真题,两周

【相关推荐】



  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7527033
  • 这篇博客你也可以参考下:【数据结构学习】单链表的指定位置元素删除、链表的释放
  • 您还可以看一下 韦语洋(Lccee)老师的一机一码加密、被破解自动销毁随时授权回收升级系列视频课程课程中的 课程介绍:能学到什么(必看内容)小节, 巩固相关知识点
  • 除此之外, 这篇博客: 【基础学习】操作系统学习笔记 - 进程与线程:多道程序、并发、多进程、用户级线程、内核级线程中的 多个执行序列 + 一个地址空间是否实用?有价值吗? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. 一个线程用来从服务器接收数据
    2. 一个线程用来显示文本
    3. 一个线程用来处理图片(如解压缩)
    4. 一个线程用来显示图片

    (题外话:作为前端程序员,我觉得这里老师讲的不是很准确,浏览器的线程分为GUI渲染线程-显示图片和文本、JavaScript引擎线程-解压缩、事件触发线程、定时触发线程、异步http请求线程-服务器数据)

    1. 接收的数据可能各个线程都要读写(CPU、内存)
    2. 所有的内容都要显示一个屏幕上(资源)

    显然这些线程需要共享这些资源,应当采用多线程,多线程是很有价值的。

    在这里插入图片描述
    (注意这里的“多线程“只限于用户级线程,而不是内核级线程。)
    显然这里和核心就是如何实现Yield

    1. 能切换了就应该知道切换时需要是个什么样子
    2. Create实际上就是要制造出第一次切换时应该的样子。

    在这里插入图片描述
    当两个线程共用一个栈时:
    线程1:A、B
    线程2:C、D
    在这里插入图片描述
    (Yield函数是右侧红色的代码,用来找到下一条指令)
    (这里老师没有画错栈,是因为下面是高地址,就是栈顶)

    1. 执行A,要调用B,104代码压栈
    2. 执行B,要调用Yield,204代码压栈
    3. 执行Yield,找到下一个线程,即调用C
    4. 执行C,要调用D,304代码压栈
    5. 执行D,要调用Yield,404代码压栈
    6. 执行Yield,切回线程1:出栈404
    7. 没有我们想要的204出栈(左侧的栈),而是404出栈(共用的栈),程序错误了

    两个线程共用一个栈,造成了程序错误。
    因此我们必须使用两个线程+两个栈来处理:
    Yield切换时也必须要切换栈。
    如何保存线程的状态呢?TCB(Thread Control Block)
    在这里插入图片描述
    (红色长箭头表示CPU在执行哪一个线程)
    线程1要使用esp=1000的栈,线程2要使用esp=2000的栈,因此我们需要在TCB中保存两个栈的esp
    (对于栈的描述要使用栈帧,栈帧保存着esp和ebp,分别为栈顶指针和栈底指针,esp:extended stack pointer,ebp:extended base pointer)
    使用两个栈时:

    1. 执行A,调用B,104压入esp=1000栈中
    2. 执行B,调用Yield,204压入esp=1000栈中,
    3. 执行Yield,并切换至esp=2000栈,切换至线程2,调用D
    4. 执行D,调用Yield,404压入esp=2000栈中
    5. 执行Yield,并切换至esp=1000栈,切换到线程1,esp=1000出栈204,程序正常。
    6. 执行204,结束后检测到函数返回,esp=1000出栈104
    7. 执行104,结束后检测到函数返回,并且esp=1000栈空,自动调用Yield,切换至线程2,esp=2000
    8. 后边就很简单了,不再分析。

    为什么说jmp语句可以不要:
    因为Yield调用结束,上个线程正好是我们为了保存状态压栈了跳回的PC指针位置,当Yield函数调用结束后204立刻会出栈,所以不需要再jmp,这是多余的。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^