加入收藏 | 设为首页 | 会员中心 | 我要投稿 大同站长网 (https://www.0352zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

Linux和Windows两种风格的操作系统

发布时间:2021-04-22 13:33:33 所属栏目:传媒 来源:互联网
导读:编程语言都会提供的机制,该机制允许在同一进程的共享内存地址空间运行一组特殊的进程(即线程)。这些线程不仅共享同一段内存空间,还可以共享已经打开的文件,统计量等其他资源。线程机制支持程序并发运行,在多处理器核心的系统上,该并发机制能够实现多条

编程语言都会提供的机制,该机制允许在同一进程的共享内存地址空间运行一组“特殊的进程(即线程)”。这些线程不仅共享同一段内存空间,还可以共享已经打开的文件,统计量等其他资源。线程机制支持程序并发运行,在多处理器核心的系统上,该并发机制能够实现多条线程同时运行。

Linux 管理线程的方式不同于其他一些经典操作系统,Linux 并没有线程的概念,它把线程当作进程的一个子集来管理。因此,Linux 内核并未为线程提供额外调度算法,也没有提供额外的数据结构用于描述和存储线程。

就像进程一样,Linux 使用 task_struct 结构体描述和记录线程,每个线程都有唯一属于自己的 task_struct 结构。从这个角度来看,线程就是一个普通的进程,只不过线程可能和其他进程共享一些资源而已。

以 Windows 为代表的一些操作系统提供了专门用于创建线程的机制,在这些系统中,线程常常被称作“轻量级进程”,因为相对于进程而言,线程耗费的资源较少,能够较为迅速的创建和投入运行。

但是对于 Linux 而言,线程不过是进程之间共享资源的一种手段罢了。那么是不是 Linux 中的线程比 Windows 中的线程更加“重量级”呢?也不是,因为 Linux 中的进程本身就很轻量级,Linux 创建进程所需时间,并不比 Windows 创建线程所需时间多多少。

从C语言代码层面来看,假设某个进程包含 4 个线程,以 Windows 为代表的一些操作系统一般会有一个包含指向 4 个不同线程的指针的进程描述符,负责描述地址空间、打开的文件等共享资源,而线程本身再去描述自己独占的资源。

与之对应的,Linux 的做法很高雅,它仅需为这 4 个线程创建 4 个 task_struct 结构体,然后在 task_struct 中指定它们共享的资源就可以了。

创建线程

看了我最近几篇文章的读者应该已经明白,Linux 内核中的线程其实就是进程,因此线程的创建与进程的创建过程是类似的,从C语言源代码层面看,基本上也是通过 fork() 函数和 exec() 函数族实现的。只不过在调用 clone() 函数时需要传递一个参数用于描述共享资源,例如:

(编辑:大同站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读