From e7035a879ef89fa6e4fd5ec28db415fd823b5c9a Mon Sep 17 00:00:00 2001 From: liyan Date: Mon, 24 Jul 2023 09:37:07 +0000 Subject: [PATCH] update zh-cn/device-dev/kernel/kernel-small-basic-trans-user-mutex.md. Signed-off-by: li-yan339 Signed-off-by: liyan --- .../kernel/kernel-small-basic-trans-user-mutex.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-trans-user-mutex.md b/zh-cn/device-dev/kernel/kernel-small-basic-trans-user-mutex.md index f9a50100fa..91e02c6773 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-trans-user-mutex.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-trans-user-mutex.md @@ -15,19 +15,21 @@ Futex(Fast userspace mutex,用户态快速互斥锁)是内核提供的一种 当用户态产生锁的竞争或释放需要进行相关线程的调度操作时,会触发Futex系统调用进入内核,此时会将用户态锁的地址传入内核,并在内核的Futex中以锁地址来区分用户态的每一把锁,因为用户态可用虚拟地址空间为1GiB,为了便于查找、管理,内核Futex采用哈希桶来存放用户态传入的锁。 -当前哈希桶共有80个,~~0-63号桶用于存放私有锁(以虚拟地址进行哈希),64-79~~号桶用于存放共享锁(以物理地址进行哈希),私有/共享属性通过用户态锁的初始化以及Futex系统调用入参确定。 +当前哈希桶共有80个,0-63号桶用于存放私有锁(以虚拟地址进行哈希),64-79号桶用于存放共享锁(以物理地址进行哈希),私有/共享属性通过用户态锁的初始化以及Futex系统调用入参确定。 -## Futex设计图 +如下图所示,每个futex哈希桶中存放被futex_list串联起来的哈希值相同的futex node,每个futex node对应一个被挂起的task,node中key值唯一标识一把用户态锁,具有相同key值的node被queue_list串联起来表示被同一把锁阻塞的task队列。 + + **图1** Futex设计图 - **图1** ![zh-cn_image_0000001127535690](figures/zh-cn_image_0000001127535690.jpg) -如图1,每个futex哈希桶中存放被futex_list串联起来的哈希值相同的futex node,每个futex node对应一个被挂起的task,node中key值唯一标识一把用户态锁,具有相同key值的node被queue_list串联起来表示被同一把锁阻塞的task队列。 -## Futex有以下三种操作: +## Futex操作 **Futex模块接口** +Futex模块支持以下三种操作: + | 功能分类 | 接口**名称** | 描述 | | -------------- | -------------- | ------------------------------------- | | 设置线程等待 | OsFutexWait | 向Futex表中插入代表被阻塞的线程的node | -- GitLab