32#ifndef _LOS_PROCESS_PRI_H
33#define _LOS_PROCESS_PRI_H
39#ifdef LOSCFG_KERNEL_LITEIPC
42#ifdef LOSCFG_SECURITY_CAPABILITY
45#ifdef LOSCFG_SECURITY_VID
48#include "sys/resource.h"
56#define OS_PCB_NAME_LEN OS_TCB_NAME_LEN
58#ifdef LOSCFG_SECURITY_CAPABILITY
59#define OS_GROUPS_NUMBER_MAX 256
102#ifdef LOSCFG_KERNEL_SMP
107#ifdef LOSCFG_KERNEL_LITEIPC
110#ifdef LOSCFG_KERNEL_VM
118#ifdef LOSCFG_SECURITY_CAPABILITY
122#ifdef LOSCFG_SECURITY_VID
125#ifdef LOSCFG_DRIVERS_TZDRIVER
129#ifdef LOSCFG_KERNEL_CPUP
135#define CLONE_VM 0x00000100
136#define CLONE_FS 0x00000200
137#define CLONE_FILES 0x00000400
138#define CLONE_SIGHAND 0x00000800
139#define CLONE_PTRACE 0x00002000
140#define CLONE_VFORK 0x00004000
141#define CLONE_PARENT 0x00008000
142#define CLONE_THREAD 0x00010000
145#define OS_PCB_FROM_PID(processID) (((LosProcessCB *)g_processCBArray) + (processID))
146#define OS_PCB_FROM_SIBLIST(ptr) LOS_DL_LIST_ENTRY((ptr), LosProcessCB, siblingList)
147#define OS_PCB_FROM_PENDLIST(ptr) LOS_DL_LIST_ENTRY((ptr), LosProcessCB, pendList)
155#define OS_PROCESS_STATUS_INIT OS_TASK_STATUS_INIT
163#define OS_PROCESS_STATUS_READY OS_TASK_STATUS_READY
171#define OS_PROCESS_STATUS_RUNNING OS_TASK_STATUS_RUNNING
179#define OS_PROCESS_STATUS_PENDING (OS_TASK_STATUS_PENDING | OS_TASK_STATUS_DELAY | OS_TASK_STATUS_SUSPENDED)
187#define OS_PROCESS_STATUS_ZOMBIES 0x0100U
196#define OS_PROCESS_FLAG_UNUSED 0x0200U
204#define OS_PROCESS_FLAG_EXIT 0x0400U
212#define OS_PROCESS_FLAG_GROUP_LEADER 0x0800U
220#define OS_PROCESS_FLAG_ALREADY_EXEC 0x1000U
228#define OS_PROCESS_STATUS_INACTIVE (OS_PROCESS_FLAG_EXIT | OS_PROCESS_STATUS_ZOMBIES)
236 return ((processCB->
processStatus & OS_PROCESS_FLAG_UNUSED) != 0);
245 return ((processCB->
processStatus & (OS_PROCESS_FLAG_UNUSED | OS_PROCESS_STATUS_INACTIVE)) != 0);
254 return ((processCB->
processStatus & (OS_PROCESS_FLAG_UNUSED | OS_PROCESS_STATUS_ZOMBIES)) != 0);
266#define OS_PROCESS_PRIORITY_HIGHEST 0
272#define OS_PROCESS_PRIORITY_LOWEST 31
278#define OS_USER_PROCESS_PRIORITY_HIGHEST 10
284#define OS_USER_PROCESS_PRIORITY_LOWEST OS_PROCESS_PRIORITY_LOWEST
290#define OS_PROCESS_USERINIT_PRIORITY 28
292#define OS_TASK_DEFAULT_STACK_SIZE 0x2000
293#define OS_USER_TASK_SYSCALL_STACK_SIZE 0x3000
294#define OS_USER_TASK_STACK_SIZE 0x100000
296#define OS_KERNEL_MODE 0x0U
297#define OS_USER_MODE 0x1U
304#define LOS_PRIO_PROCESS 0U
305#define LOS_PRIO_PGRP 1U
306#define LOS_PRIO_USER 2U
308#define OS_USER_PRIVILEGE_PROCESS_GROUP 1U
309#define OS_KERNEL_PROCESS_GROUP 2U
316#define OS_PRO_EXIT_OK 0
325 processCB->
exitCode |= signal & 0x7FU;
335 return (processCB->
exitCode) & 0x7FU;
340 processCB->
exitCode |= ((code & 0x000000FFU) << 8U) & 0x0000FF00U;
346#define OS_PID_CHECK_INVALID(pid) (((UINT32)(pid)) >= g_processMaxNum)
363#ifdef LOSCFG_SECURITY_CAPABILITY
382 if (process->
user != NULL) {
392 return OS_PCB_FROM_PID(taskCB->
processID)->threadGroupID;
397 return OS_PCB_FROM_PID(taskCB->
processID)->threadNumber;
400#ifdef LOSCFG_KERNEL_VM
407#ifdef LOSCFG_DRIVERS_TZDRIVER
416#define LOS_WAIT_WNOHANG (1 << 0U)
423#define LOS_WAIT_WUNTRACED (1 << 1U)
424#define LOS_WAIT_WSTOPPED (1 << 1U)
429#define LOS_WAIT_WEXITED (1 << 2U)
435#define LOS_WAIT_WCONTINUED (1 << 3U)
441#define LOS_WAIT_WNOWAIT (1 << 24U)
446#define OS_PROCESS_WAIT (1 << 15U)
451#define OS_PROCESS_WAIT_ANY OS_TASK_WAIT_ANYPROCESS
456#define OS_PROCESS_WAIT_PRO OS_TASK_WAIT_PROCESS
461#define OS_PROCESS_WAIT_GID OS_TASK_WAIT_GID
463#define OS_PROCESS_INFO_ALL 1
464#define OS_PROCESS_DEFAULT_UMASK 0022
macro EXC_SP_SET reg1 mrc 获取CPU信息 and mov mul reg0 计算当前CPU栈的偏移位置 ldr reg1 相减得到栈顶 mov sp
STATIC INLINE VOID LOS_IntRestore(UINT32 intSave)
Restore interrupts. | 恢复到使用LOS_IntLock关闭所有中断之前的状态
STATIC INLINE UINT32 LOS_IntLock(VOID)
Disable all interrupts. | 关闭当前处理器所有中断响应
VOID *(* TSK_ENTRY_FUNC)(UINTPTR param1, UINTPTR param2, UINTPTR param3, UINTPTR param4)
Define the type of a task entrance function.
LosVmSpace * OsExecProcessVmSpaceReplace(LosVmSpace *newSpace, UINTPTR stackBase, INT32 randomDevFD)
STATIC INLINE LosVmSpace * OsProcessVmSpaceGet(const LosProcessCB *processCB)
UINT32 OsGetKernelInitProcessID(VOID)
获取内核态根进程
STATIC INLINE UINT32 OsProcessThreadGroupIDGet(const LosTaskCB *taskCB)
VOID OsDeleteTaskFromProcess(LosTaskCB *taskCB)
INT32 OsSendSignalToAllProcess(siginfo_t *info, INT32 permission)
STATIC INLINE UINT32 OsProcessThreadNumberGet(const LosTaskCB *taskCB)
STATIC INLINE struct Vnode * OsProcessExecVnodeGet(const LosProcessCB *processCB)
STATIC INLINE BOOL OsProcessIsInit(const LosProcessCB *processCB)
VOID OsProcessCBRecycleToFree(VOID)
UINT32 g_processMaxNum
进程最大数量
UINT32 OsSystemProcessCreate(VOID)
VOID OsSetSigHandler(UINTPTR addr)
设置进程的信号处理函数
UINT32 OsGetUserInitProcessID(VOID)
获取用户态进程的根进程,所有用户进程都是g_processCBArray[g_userInitProcess] fork来的
VOID OsExecProcessVmSpaceRestore(LosVmSpace *oldSpace)
STATIC INLINE BOOL OsProcessIsInactive(const LosProcessCB *processCB)
进程不活跃函数定义:身上贴有不使用且不活跃标签的进程
VOID OsProcessResourcesToFree(LosProcessCB *processCB)
STATIC INLINE UINT32 OsProcessUserIDGet(const LosTaskCB *taskCB)
VOID OsProcessNaturalExit(LosProcessCB *processCB, UINT32 status)
UINT32 OsProcessAddNewTask(UINT32 pid, LosTaskCB *taskCB, SchedParam *param)
STATIC INLINE BOOL OsProcessIsDead(const LosProcessCB *processCB)
进程死啦死啦的定义: 身上贴有不使用且状态为僵死的进程
LosProcessCB * g_processCBArray
进程池 OsProcessInit
struct ProcessCB LosProcessCB
INT32 OsSetProcessGroupID(UINT32 pid, UINT32 gid)
INT32 OsGetProcessPriority(INT32 which, INT32 pid)
接口封装 - 获取进程优先级 which:标识进程,进程组,用户
UINT32 OsSetProcessName(LosProcessCB *processCB, const CHAR *name)
STATIC INLINE BOOL OsProcessIsUserMode(const LosProcessCB *processCB)
STATIC INLINE User * OsCurrUserGet(VOID)
VOID OsProcessThreadGroupDestroy(VOID)
UINT32 OsGetIdleProcessID(VOID)
获取内核态空闲进程
UINT32 OsUserInitProcess(VOID)
STATIC INLINE VOID OsProcessExitCodeSignalSet(LosProcessCB *processCB, UINT32 signal)
设置进程退出信号(0 ~ 7)
UINTPTR __user_init_load_addr
init 进程的加载地址 ,由链接器赋值
UINTPTR OsGetSigHandler(VOID)
获取进程的信号处理函数
STATIC INLINE VOID OsProcessExitCodeSignalClear(LosProcessCB *processCB)
清除进程退出信号(0 ~ 7)
UINT32 OsExecRecycleAndInit(LosProcessCB *processCB, const CHAR *name, LosVmSpace *oldAspace, UINTPTR oldFiles)
进程的回收再利用,被LOS_DoExecveFile调用
STATIC INLINE BOOL OsProcessExitCodeSignalIsSet(LosProcessCB *processCB)
进程退出码是否被设置过,默认是 0 ,如果 & 0x7FU 还是 0 ,说明没有被设置过.
UINTPTR __user_init_bss
查看 LITE_USER_SEC_BSS ,赋值由liteos.ld完成
STATIC INLINE BOOL OsProcessIsUnused(const LosProcessCB *processCB)
INT32 OsSetCurrProcessGroupID(UINT32 gid)
STATIC INLINE BOOL OsProcessIDUserCheckInvalid(UINT32 pid)
STATIC INLINE LosProcessCB * OsCurrProcessGet(VOID)
UINT32 OsExecStart(const TSK_ENTRY_FUNC entry, UINTPTR sp, UINTPTR mapBase, UINT32 mapSize)
执行用户态任务, entry为入口函数 ,其中 创建好task,task上下文 等待调度真正执行, sp:栈指针 mapBase:栈底 mapSize:栈大小
UINTPTR __user_init_end
init 进程的用户空间初始化结束地址
STATIC INLINE VOID OsProcessExitCodeCoreDumpSet(LosProcessCB *processCB)
置进程退出码第七位为1
INT32 OsSetProcessScheduler(INT32 which, INT32 pid, UINT16 prio, UINT16 policy)
设置进程调度计划
UINTPTR __user_init_entry
第一个用户态进程(init)的入口地址 查看 LITE_USER_SEC_ENTRY
INT32 OsClone(UINT32 flags, UINTPTR sp, UINT32 size)
OsClone 进程克隆
VOID OsWaitWakeTask(LosTaskCB *taskCB, UINT32 wakePID)
STATIC INLINE VOID OsProcessExitCodeSet(LosProcessCB *processCB, UINT32 code)
设置进程退出号(8 ~ 15)
INT32 OsSendSignalToProcessGroup(INT32 pid, siginfo_t *info, INT32 permission)
STATIC INLINE LosTaskCB * OsCurrTaskGet(VOID)
进程IPC信息,见于进程结构体: LosProcessCB.ipcInfo
struct rlimit * resourceLimit
每个进程在运行时系统不会无限制的允许单个进程不断的消耗资源,因此都会设置资源限制。
LOS_DL_LIST subordinateGroupList
struct files_struct * files
CHAR processName[OS_PCB_NAME_LEN]
LOS_DL_LIST threadSiblingList
volatile UINT32 threadNumber
UINT32 capability
安全能力范围 对应 CAP_SETGID
LOS_DL_LIST exitChildList
mode_t umask
umask(user file-creatiopn mode mask)为用户文件创建掩码,是创建文件或文件夹时默认权限的基础。
LOS_DL_LIST exitProcessList
UINT32 userID
用户ID [0,60000],0为root用户
UINT32 gid
用户组ID [0,60000],0为root用户组
虚拟空间,每个进程都有一个属于自己的虚拟内存地址空间
vnode并不包含文件名,因为 vnode和文件名是 1:N 的关系
ARG_NUM_3 ARG_NUM_1 ARG_NUM_2 ARG_NUM_2 ARG_NUM_3 ARG_NUM_1 ARG_NUM_4 ARG_NUM_2 ARG_NUM_2 ARG_NUM_5 ARG_NUM_2 ARG_NUM_0 ARG_NUM_2 ARG_NUM_1 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_4 ARG_NUM_5 ARG_NUM_6 ARG_NUM_3 ARG_NUM_5 ARG_NUM_7 ARG_NUM_1 ARG_NUM_4 ARG_NUM_5 ARG_NUM_4 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_7 ARG_NUM_3 ARG_NUM_3 ARG_NUM_3 ARG_NUM_7 ARG_NUM_3 ARG_NUM_2 char ARG_NUM_2 ARG_NUM_1 ARG_NUM_0 ARG_NUM_0 ARG_NUM_3 void ARG_NUM_1 ARG_NUM_0 unsigned ARG_NUM_0 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_5 ARG_NUM_3 ARG_NUM_3 ARG_NUM_4 ARG_NUM_1 ARG_NUM_1 ARG_NUM_3 ARG_NUM_2 mode_t