123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- use alloc::{string::String, sync::Arc, vec::Vec};
- use crate::{
- process::{fork::KernelCloneArgs, KernelStack, ProcessControlBlock, ProcessManager},
- syscall::SystemError,
- };
- use super::interrupt::TrapFrame;
- pub mod kthread;
- pub mod syscall;
- #[allow(dead_code)]
- #[repr(align(32768))]
- union InitProcUnion {
- /// 用于存放idle进程的内核栈
- idle_stack: [u8; 32768],
- }
- #[link_section = ".data.init_proc_union"]
- #[no_mangle]
- static BSP_IDLE_STACK_SPACE: InitProcUnion = InitProcUnion {
- idle_stack: [0; 32768],
- };
- pub unsafe fn arch_switch_to_user(path: String, argv: Vec<String>, envp: Vec<String>) -> ! {
- unimplemented!("RiscV64 arch_switch_to_user")
- }
- impl ProcessManager {
- pub fn arch_init() {
- unimplemented!("ProcessManager::arch_init")
- }
- /// fork的过程中复制线程
- ///
- /// 由于这个过程与具体的架构相关,所以放在这里
- pub fn copy_thread(
- current_pcb: &Arc<ProcessControlBlock>,
- new_pcb: &Arc<ProcessControlBlock>,
- clone_args: KernelCloneArgs,
- current_trapframe: &TrapFrame,
- ) -> Result<(), SystemError> {
- unimplemented!("ProcessManager::copy_thread")
- }
- /// 切换进程
- ///
- /// ## 参数
- ///
- /// - `prev`:上一个进程的pcb
- /// - `next`:下一个进程的pcb
- pub unsafe fn switch_process(prev: Arc<ProcessControlBlock>, next: Arc<ProcessControlBlock>) {
- unimplemented!("ProcessManager::switch_process")
- }
- }
- impl ProcessControlBlock {
- /// 获取当前进程的pcb
- pub fn arch_current_pcb() -> Arc<Self> {
- unimplemented!("ProcessControlBlock::arch_current_pcb")
- }
- }
- /// PCB中与架构相关的信息
- #[derive(Debug)]
- #[allow(dead_code)]
- pub struct ArchPCBInfo {
- // todo: add arch related fields
- }
- #[allow(dead_code)]
- impl ArchPCBInfo {
- /// 创建一个新的ArchPCBInfo
- ///
- /// ## 参数
- ///
- /// - `kstack`:内核栈的引用
- ///
- /// ## 返回值
- ///
- /// 返回一个新的ArchPCBInfo
- pub fn new(kstack: &KernelStack) -> Self {
- unimplemented!("ArchPCBInfo::new")
- }
- // ### 从另一个ArchPCBInfo处clone,但是保留部分字段不变
- pub fn clone_from(&mut self, from: &Self) {
- unimplemented!("ArchPCBInfo::clone_from")
- }
- }
|