mod.rs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. use alloc::{string::String, sync::Arc, vec::Vec};
  2. use crate::{
  3. process::{fork::KernelCloneArgs, KernelStack, ProcessControlBlock, ProcessManager},
  4. syscall::SystemError,
  5. };
  6. use super::interrupt::TrapFrame;
  7. pub mod kthread;
  8. pub mod syscall;
  9. #[allow(dead_code)]
  10. #[repr(align(32768))]
  11. union InitProcUnion {
  12. /// 用于存放idle进程的内核栈
  13. idle_stack: [u8; 32768],
  14. }
  15. #[link_section = ".data.init_proc_union"]
  16. #[no_mangle]
  17. static BSP_IDLE_STACK_SPACE: InitProcUnion = InitProcUnion {
  18. idle_stack: [0; 32768],
  19. };
  20. pub unsafe fn arch_switch_to_user(path: String, argv: Vec<String>, envp: Vec<String>) -> ! {
  21. unimplemented!("RiscV64 arch_switch_to_user")
  22. }
  23. impl ProcessManager {
  24. pub fn arch_init() {
  25. unimplemented!("ProcessManager::arch_init")
  26. }
  27. /// fork的过程中复制线程
  28. ///
  29. /// 由于这个过程与具体的架构相关,所以放在这里
  30. pub fn copy_thread(
  31. current_pcb: &Arc<ProcessControlBlock>,
  32. new_pcb: &Arc<ProcessControlBlock>,
  33. clone_args: KernelCloneArgs,
  34. current_trapframe: &TrapFrame,
  35. ) -> Result<(), SystemError> {
  36. unimplemented!("ProcessManager::copy_thread")
  37. }
  38. /// 切换进程
  39. ///
  40. /// ## 参数
  41. ///
  42. /// - `prev`:上一个进程的pcb
  43. /// - `next`:下一个进程的pcb
  44. pub unsafe fn switch_process(prev: Arc<ProcessControlBlock>, next: Arc<ProcessControlBlock>) {
  45. unimplemented!("ProcessManager::switch_process")
  46. }
  47. }
  48. impl ProcessControlBlock {
  49. /// 获取当前进程的pcb
  50. pub fn arch_current_pcb() -> Arc<Self> {
  51. unimplemented!("ProcessControlBlock::arch_current_pcb")
  52. }
  53. }
  54. /// PCB中与架构相关的信息
  55. #[derive(Debug)]
  56. #[allow(dead_code)]
  57. pub struct ArchPCBInfo {
  58. // todo: add arch related fields
  59. }
  60. #[allow(dead_code)]
  61. impl ArchPCBInfo {
  62. /// 创建一个新的ArchPCBInfo
  63. ///
  64. /// ## 参数
  65. ///
  66. /// - `kstack`:内核栈的引用
  67. ///
  68. /// ## 返回值
  69. ///
  70. /// 返回一个新的ArchPCBInfo
  71. pub fn new(kstack: &KernelStack) -> Self {
  72. unimplemented!("ArchPCBInfo::new")
  73. }
  74. // ### 从另一个ArchPCBInfo处clone,但是保留部分字段不变
  75. pub fn clone_from(&mut self, from: &Self) {
  76. unimplemented!("ArchPCBInfo::clone_from")
  77. }
  78. }