From: Minep
Date: Tue, 17 Jan 2023 10:30:13 +0000 (+0000)
Subject: Merge branch 'master' into prog-loader
X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/commitdiff_plain/0eabc11fcf240415e39f3873dfce7cd9384b3042?hp=-c
Merge branch 'master' into prog-loader
---
0eabc11fcf240415e39f3873dfce7cd9384b3042
diff --combined README.md
index 7740e1b,c593d19..a9d1b66
--- a/README.md
+++ b/README.md
@@@ -3,7 -3,7 +3,7 @@@
- ç®ä½ä¸æ | English
+ ç®ä½ä¸æ | English
# LunaixOS Project
@@@ -23,7 -23,7 +23,7 @@@ LunaixOS - ä¸ä¸ªç®åçï¼è¯¦ç»çï
+ å
å管ç䏿éå页ï¼Demand Pagingï¼
+ é®çè¾å
¥
+ å¤è¿ç¨
-+ 47个常è§çLinux/POSIXç³»ç»è°ç¨ï¼[éå½1](#appendix1)ï¼
++ 50个常è§çLinux/POSIXç³»ç»è°ç¨ï¼[éå½1](#appendix1)ï¼
+ ç¨æ·æ¨¡å¼
+ ä¿¡å·æºå¶
+ PCI 3.0
@@@ -144,7 -144,6 +144,7 @@@ qemu-img create -f vdi machine/disk0.vd
+ [ECMA-119 (ISO9660)](https://www.ecma-international.org/publications-and-standards/standards/ecma-119/)
+ Rock Ridge Interchange Protocol (RRIP: IEEE P1282)
+ System Use Sharing Protocol (SUSP: IEEE P1281)
++ Tool Interface Standard (TIS) Portable Formats Specification (Version 1.1)
**å
责声æï¼PCIç¸å
³çæ åæç»è§£éæå½PCI-SIGææãæ¤å¤æä¾ç坿¬ä»
ä¾ä¸ªäººå¦ä¹ 使ç¨ãä»»ä½åç¨ç®çé¡»åPCI-SIGè´ä¹°ã**
@@@ -191,7 -190,7 +191,7 @@@
2. `write(2)`
2. `open(2)`
2. `close(2)`
-2. `mkdir(2)`â»
+2. `mkdir(2)`
2. `lseek(2)`
2. `readdir(2)`
2. `readlink(2)`â»
@@@ -217,9 -216,6 +217,9 @@@
2. `ioctl(2)`
2. `getpgid(2)`
2. `setpgid(2)`
+2. `mmap(2)`
+2. `munmap(2)`
+2. `execve(2)`
**LunaixOSèªæ**
diff --combined docs/README_en.md
index 1de21a6,a0ce125..a7dd415
--- a/docs/README_en.md
+++ b/docs/README_en.md
@@@ -3,7 -3,7 +3,7 @@@
- ç®ä½ä¸æ | English
+ ç®ä½ä¸æ | English
# The LunaixOS Project
@@@ -25,7 -25,7 +25,7 @@@ The following list presents all feature
+ Memory management & demand paging
+ PS/2 Keyboard support
+ Muti-tasking and task management
-+ 47 commonly used POSIX syscallï¼[See Appendix 1](#appendix1)ï¼
++ 50 commonly used POSIX syscallï¼[See Appendix 1](#appendix1)ï¼
+ User Space
+ Signal
+ PCI 3.0
@@@ -142,7 -142,6 +142,7 @@@ The following list also enumerated suc
+ [ECMA-119 (ISO9660)](https://www.ecma-international.org/publications-and-standards/standards/ecma-119/)
+ Rock Ridge Interchange Protocol (RRIP: IEEE P1282)
+ System Use Sharing Protocol (SUSP: IEEE P1281)
++ Tool Interface Standard (TIS) Portable Formats Specification (Version 1.1)
**DISCLAIMER: All rights of PCI-related specification is reserved by PCI-SIG. It is provided ONLY for learning purpose. Any commercial use should purchase a copy from PCI-SIG**
@@@ -187,7 -186,7 +187,7 @@@
2. `write(2)`
2. `open(2)`
2. `close(2)`
-2. `mkdir(2)`â»
+2. `mkdir(2)`
2. `lseek(2)`
2. `readdir(2)`
2. `readlink(2)`â»
@@@ -210,12 -209,9 +210,12 @@@
2. `setxattr(2)`â»
2. `fgetxattr(2)`â»
2. `fsetxattr(2)`â»
-2. `ioctl(2)`â»
+2. `ioctl(2)`
2. `getpgid(2)`
2. `setpgid(2)`
+2. `mmap(2)`
+2. `munmap(2)`
+2. `execve(2)`
**LunaixOS**
diff --combined lunaix-os/kernel/process/sched.c
index ade13b3,5e882b7..edde8bc
--- a/lunaix-os/kernel/process/sched.c
+++ b/lunaix-os/kernel/process/sched.c
@@@ -6,7 -6,7 +6,7 @@@
#include
#include
-#include
+#include
#include
#include
#include
@@@ -18,8 -18,6 +18,8 @@@
#include
#include
+#include
+
volatile struct proc_info* __current;
static struct proc_info dummy_proc;
@@@ -60,23 -58,23 +60,23 @@@ sched_init_dummy(
extern void my_dummy();
static char dummy_stack[DUMMY_STACK_SIZE] __attribute__((aligned(16)));
- // memset to 0
- dummy_proc = (struct proc_info){};
- dummy_proc.intr_ctx = (isr_param){
- .registers = { .ds = KDATA_SEG,
- .es = KDATA_SEG,
- .fs = KDATA_SEG,
- .gs = KDATA_SEG,
- .esp = (void*)dummy_stack + DUMMY_STACK_SIZE - 20 },
+ struct exec_param* execp =
+ (void*)dummy_stack + DUMMY_STACK_SIZE - sizeof(struct exec_param);
+
+ *execp = (struct exec_param){
.cs = KCODE_SEG,
+ .eflags = cpu_reflags() | 0x0200,
.eip = (void*)my_dummy,
.ss = KDATA_SEG,
- .eflags = cpu_reflags() | 0x0200
};
- *(u32_t*)(&dummy_stack[DUMMY_STACK_SIZE - 4]) = dummy_proc.intr_ctx.eflags;
- *(u32_t*)(&dummy_stack[DUMMY_STACK_SIZE - 8]) = KCODE_SEG;
- *(u32_t*)(&dummy_stack[DUMMY_STACK_SIZE - 12]) = dummy_proc.intr_ctx.eip;
+ // memset to 0
+ dummy_proc = (struct proc_info){};
+ dummy_proc.intr_ctx = (isr_param){ .registers = { .ds = KDATA_SEG,
+ .es = KDATA_SEG,
+ .fs = KDATA_SEG,
+ .gs = KDATA_SEG },
+ .execp = execp };
dummy_proc.page_table = cpu_rcr3();
dummy_proc.state = PS_READY;
@@@ -99,7 -97,7 +99,7 @@@ run(struct proc_info* proc
ç±äºè¿ä¸é´æ²¡æè¿è¡å°å空é´ç交æ¢ï¼æä»¥ç¬¬äºæ¬¡è·³è½¬ä½¿ç¨çæ¯åä¸ä¸ªå
æ ¸æ ï¼èä¹åé»è®¤tss.esp0ç弿¯æ°¸è¿æåæé¡¶é¨
è¿æ ·ä¸æ¥å°±æå¯è½ä¼è¦çæ´æ©çä¸ä¸æä¿¡æ¯ï¼æ¯å¦åµå¥çä¿¡å·æè·å½æ°ï¼
*/
- tss_update_esp(proc->intr_ctx.registers.esp);
+ tss_update_esp(proc->intr_ctx.esp);
apic_done_servicing();
@@@ -215,7 -213,10 +215,10 @@@ __DEFINE_LXSYSCALL1(unsigned int, sleep
struct proc_info* root_proc = sched_ctx._procs[0];
__current->sleep.wakeup_time = clock_systime() + seconds * 1000;
- llist_append(&root_proc->sleep.sleepers, &__current->sleep.sleepers);
+
+ if (llist_empty(&__current->sleep.sleepers)) {
+ llist_append(&root_proc->sleep.sleepers, &__current->sleep.sleepers);
+ }
__current->intr_ctx.registers.eax = seconds;
@@@ -326,14 -327,13 +329,14 @@@ alloc_process(
proc->state = PS_CREATED;
proc->pid = i;
+ proc->mm.pid = i;
proc->created = clock_systime();
proc->pgid = proc->pid;
proc->fdtable = vzalloc(sizeof(struct v_fdtable));
proc->fxstate =
vzalloc_dma(512); // FXSAVEéè¦åå
ä½å¯¹é½å°åï¼ä½¿ç¨DMAåï¼128ä½å¯¹é½ï¼
- llist_init_head(&proc->mm.regions.head);
+ llist_init_head(&proc->mm.regions);
llist_init_head(&proc->tasks);
llist_init_head(&proc->children);
llist_init_head(&proc->grp_member);
@@@ -403,18 -403,17 +406,18 @@@ destroy_process(pid_t pid
vfree(proc->fdtable);
vfree_dma(proc->fxstate);
+ vmm_mount_pd(VMS_MOUNT_1, proc->page_table);
+
struct mm_region *pos, *n;
- llist_for_each(pos, n, &proc->mm.regions.head, head)
+ llist_for_each(pos, n, &proc->mm.regions, head)
{
- vfree(pos);
+ mem_sync_pages(VMS_MOUNT_1, pos, pos->start, pos->end - pos->start, 0);
+ region_release(pos);
}
- vmm_mount_pd(PD_MOUNT_1, proc->page_table);
-
- __del_pagetable(pid, PD_MOUNT_1);
+ __del_pagetable(pid, VMS_MOUNT_1);
- vmm_unmount_pd(PD_MOUNT_1);
+ vmm_unmount_pd(VMS_MOUNT_1);
cake_release(proc_pile, proc);