码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux进程/线程几个经典问题


    进程/线程

    • fork()后发生了什么
    • 父子进程的内容有何异同
    • 线程独占和共享的资源有哪些
    • 死锁相关问题

    fork()后发生了什么

    1. 系统为子进程开辟新的用户空间,创建进程控制块对应的数据结构task_struct,为子进程分配一个PID。
    2. 设置子进程地址空间到物理内存的映射,父子进程代码段映射的是同一块物理内存,数据采用写时拷贝的方式,可以节省内存空间。
    3. 子进程的task_struct加入到内核的管理链表中,fork()返回。

    父子进程的内容有何异同

    父子进程代码段共享,子进程还会继承父进程的环境变量、文件描述符表。父子进程有独立的数据段、堆、栈,这些区域的数据发生写时拷贝前映射的是同一块物理内存。父子进程的PID、PPID、fork()的返回值不同

    共享区?

    线程独占和共享的资源有哪些

    共享的内容:
    进程的多个线程共享代码段、数据段、堆区。
    以及一些具体的内容比如:
    文件描述符表
    每种信号的处理方式(SIG_ IGN、SIG_ DFL或者自定义的信号处理函数)
    当前工作目录
    用户id和组id

    好文推荐

    线程独有的内容:
    线程ID
    栈(划分进程的栈区)
    错误返回码errno
    信号屏蔽字
    调度优先级
    一组寄存器

    进程的某个线程如果拿到其他线程栈区数据的地址也可以访问

    死锁相关问题

    什么是死锁?
    死锁指一组进程中各个进程均占有并且不释放资源,但因互相申请被其他进程占有并且不释放的资源而处于的一种永久等待的状态。

    死锁的四个必要条件?
    互斥条件:一个资源每次只能被一个执行流使用
    请求与保持条件:一个执行流因请求资源而阻塞时,对已获得的资源保持不释放
    不剥夺条件:一个执行流已获得的资源不能被强行剥夺
    循环等待条件:若干执行流之间形成一种头尾相接的循环等待资源的关系

    如何解决死锁?
    悲观一些的方法:预防和避免死锁
    乐观一些的方法:死锁发生后解除或者使用检测死锁的算法

    预方死锁:

    1. 破坏四个必要条件:
      破坏互斥条件:使资源可以被同时访问,很多资源往往是不能同时被访问的 ,所以这种方法使用场景不多。
      破坏不剥夺条件:采用剥夺式调度算法,会导致资源利用率下降。
      破坏请求与保持条件:使用静态分配策略,在执行流执行前分配给它所需的全部资源,但会使资源利用率很低。
      破坏循环等待条件:使用层次分配策略,给资源分层,一个执行流申请到某个资源后,只能申请层次更高的资源,释放资源时必须先释放高层次的资源。

    2. 使用一些避免死锁的算法,比如银行家算法,试探性地给执行流分配资源,然后通过安全性算法判断分配后系统是否处于安全状态,若不安全则试探分配作废。

    解除死锁:

    1. 重启操作系统,损失较大
    2. 关闭涉及死锁的进程,可以全部关闭或者逐步关闭直到破除死锁
    3. 逐步抢占涉及死锁的进程占有的资源,直到死锁解除
  • 相关阅读:
    HTML网页设计制作大作业(div+css)---浩瀚天文 (13页有二级菜单)
    学术团体的机器人相关分会和机器人相关大赛的说明
    pytest框架如何设置失败重跑,以及运行用例时小技巧
    Taurus.MVC 微服务框架 入门开发教程:项目集成:3、客户端:其它编程语言项目集成:Java集成应用中心。
    PX4模块设计之十七:ModuleBase模块
    实验室超声波清洗机应具备哪些特点
    java毕业设计高校心理教育辅导mybatis+源码+调试部署+系统+数据库+lw
    代码随想录算法训练营第三天| LeetCode ● 203.移除链表元素 ● 707.设计链表 ● 206.反转链表
    广告联盟是什么?app开发者如何选择广告联盟?
    你真的知道自己多大了吗?
  • 原文地址:https://blog.csdn.net/sqjddb/article/details/126269665
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号