台式机&硬件面试官:换人!他连进程线程协程这几个特点都说不出( 二 )
上述几种内存区域中数据段、BSS 段、堆通常是被连续存储在内存中 , 在位置上是连续的 , 而代码段和栈往往会被独立存放 。 堆和栈两个区域在 i386 体系结构中栈向下扩展、堆向上扩展 , 相对而生 。
本文插图
size 命令查看编译后程序的各个内存区域大小:
[lemon ~]# size /usr/local/sbin/sshd text data bss dec hex filename1924532 12412 426896 2363840 2411c0 /usr/local/sbin/sshd 内核空间
在 x86 32 位系统里 , Linux 内核地址空间是指虚拟地址从 0xC0000000 开始到 0xFFFFFFFF 为止的高端内存地址空间 , 总计 1G 的容量 ,包括了内核镜像、物理页面表、驱动程序等运行在内核空间。
本文插图
多线程程序模型 线程资源和开销
【台式机&硬件面试官:换人!他连进程线程协程这几个特点都说不出】同一进程中的多条线程共享该进程中的全部系统资源 , 如虚拟地址空间 , 文件描述符文件描述符和信号处理等等 。 但同一进程中的多个线程有各自的调用栈、寄存器环境、线程本地存储等信息 。
线程创建的开销主要是线程堆栈的建立 , 分配内存的开销 。 这些开销并不大 , 最大的开销发生在线程上下文切换的时候 。
本文插图
用户级线程
实现在用户空间的线程称为用户级线程 。 用户线程是完全建立在用户空间的线程库 , 用户线程的创建、调度、同步和销毁全由用户空间的库函数完成 , 不需要内核的参与 , 因此这种线程的系统资源消耗非常低 , 且非常的高效 。
特点
用户线级线程只能参与竞争该进程的处理器资源 , 不能参与全局处理器资源的竞争 。
用户级线程切换都在用户空间进行 , 开销极低 。
用户级线程调度器在用户空间的线程库实现 , 内核的调度对象是进程本身 , 内核并不知道用户线程的存在 。
本文插图
如果触发了引起阻塞的系统调用的调用 , 会立即阻塞该线程所属的整个进程 。
系统只看到进程看不到用户线程 , 所以只有一个处理器内核会被分配给该进程, 也就不能发挥多核 CPU 的优势。
内核级线程
内核线程建立和销毁都是由操作系统负责、通过系统调用完成 , 内核维护进程及线程的上下文信息以及线程切换 。
特点
内核级线级能参与全局的多核处理器资源分配 , 充分利用多核 CPU 优势 。
每个内核线程都可被内核调度 , 因为线程的创建、撤销和切换都是由内核管理的 。
一个内核线程阻塞与他同属一个进程的线程仍然能继续运行 。
推荐阅读
- 彬彬这厢有礼了 ChinaJoy篇二:看到的一些不一样的硬件
- "飒"英雄!20岁女兵征服40吨远火车 巾帼不让秀媚
- 零售店|194年历史!美国最古老奢侈品百货店Lord&Taylor申请破产保护
- 环球网|泰国士兵赴美参加联合演习 回国后9人新冠确诊
- 新闻联播|辽宁+8 新疆+28 乌鲁木齐:救治费用全免
- 游戏青年|硬件收入下降31%,软游戏部门2020财年收入同比增长2%
- 供给|措施“变味”……“停车难”治理“堵点”咋打通
- 浙江|台风“黑格比”影响浙江等地 多地将有强降雨
- 网友|中储粮回应“禁带手机进粮库”:已责令纠正
- 环球时报|柏林两万人高喊"自由"参加新冠大游行,市长怒了
