refactor-process-pcb-init (#1193)

将`do_create_pcb()`的内存占用量从10k降低到5k

Signed-off-by: longjin <longjin@DragonOS.org>
This commit is contained in:
LoGin 2025-06-05 22:51:27 +08:00 committed by GitHub
parent 0b358b9db5
commit 78588e88b1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -803,12 +803,15 @@ impl ProcessControlBlock {
let flags = unsafe { LockFreeFlags::new(ProcessFlags::empty()) };
let sched_info = ProcessSchedulerInfo::new(None);
let arch_info = SpinLock::new(ArchPCBInfo::new(&kstack));
let ppcb: Weak<ProcessControlBlock> = ProcessManager::find(ppid)
.map(|p| Arc::downgrade(&p))
.unwrap_or_default();
let mut pcb = Self {
// 使用 Arc::new_cyclic 避免在栈上创建巨大的结构体
let pcb = Arc::new_cyclic(|weak| {
let arch_info = SpinLock::new(ArchPCBInfo::new(&kstack));
let pcb = Self {
pid,
tgid: pid,
thread_pid: Arc::new(RwLock::new(PidStrcut::new())),
@ -833,7 +836,7 @@ impl ProcessControlBlock {
robust_list: RwLock::new(None),
nsproxy: Arc::new(RwLock::new(NsProxy::new())),
cred: SpinLock::new(cred),
self_ref: Weak::new(),
self_ref: weak.clone(),
restart_block: SpinLock::new(None),
process_group: Mutex::new(Weak::new()),
executable_path: RwLock::new(name),
@ -847,8 +850,6 @@ impl ProcessControlBlock {
.lock()
.init_syscall_stack(&pcb.syscall_stack.read());
let pcb = Arc::new_cyclic(|weak| {
pcb.self_ref = weak.clone();
pcb
});