mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-08 14:16:47 +00:00
refactor-process-pcb-init (#1193)
将`do_create_pcb()`的内存占用量从10k降低到5k Signed-off-by: longjin <longjin@DragonOS.org>
This commit is contained in:
parent
0b358b9db5
commit
78588e88b1
@ -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
|
||||
});
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user