getpid
This commit is contained in:
@@ -61,9 +61,11 @@ extern "C" size_t syscall_handler(size_t sysnum, size_t p1, size_t p2,
|
|||||||
case Syscall::ID::SEM_SIGNAL:
|
case Syscall::ID::SEM_SIGNAL:
|
||||||
Syscall::Skeleton::sem_signal(Guard::enter().vault(), p1);
|
Syscall::Skeleton::sem_signal(Guard::enter().vault(), p1);
|
||||||
break;
|
break;
|
||||||
|
case Syscall::ID::SYS_GETPID:
|
||||||
|
return Syscall::Skeleton::getpid(Guard::enter().vault());
|
||||||
case Syscall::ID::SYS_EXIT:
|
case Syscall::ID::SYS_EXIT:
|
||||||
Syscall::Skeleton::exit(Guard::enter().vault());
|
Syscall::Skeleton::exit(Guard::enter().vault());
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return static_cast<size_t>(-1);
|
return static_cast<size_t>(-1);
|
||||||
|
|||||||
@@ -9,6 +9,9 @@
|
|||||||
|
|
||||||
void *operator new(size_t, void *);
|
void *operator new(size_t, void *);
|
||||||
|
|
||||||
|
#include "../user/app1/appl.h"
|
||||||
|
extern Application apps[];
|
||||||
|
|
||||||
namespace Syscall {
|
namespace Syscall {
|
||||||
namespace Skeleton {
|
namespace Skeleton {
|
||||||
size_t test(Vault &vault, size_t p1, size_t p2, size_t p3, size_t p4,
|
size_t test(Vault &vault, size_t p1, size_t p2, size_t p3, size_t p4,
|
||||||
@@ -20,8 +23,10 @@ size_t test(Vault &vault, size_t p1, size_t p2, size_t p3, size_t p4,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int getpid(Vault &vault) {
|
int getpid(Vault &vault) {
|
||||||
(void)vault;
|
Thread *me = vault.scheduler.active();
|
||||||
return -1;
|
unsigned id = 0;
|
||||||
|
while (&apps[id++] != me); // TODO find better pid source
|
||||||
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t write(Vault &vault, uint32_t id, const void *buffer, size_t size, int x, int y) {
|
size_t write(Vault &vault, uint32_t id, const void *buffer, size_t size, int x, int y) {
|
||||||
@@ -45,6 +50,8 @@ size_t write(Vault &vault, uint32_t id, const void *buffer, size_t size, int x,
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t read(Vault &vault, uint32_t id, void *buf, size_t len) {
|
size_t read(Vault &vault, uint32_t id, void *buf, size_t len) {
|
||||||
|
(void)id;
|
||||||
|
|
||||||
size_t read_cnt = 0;
|
size_t read_cnt = 0;
|
||||||
while(read_cnt <= len){
|
while(read_cnt <= len){
|
||||||
Key key;
|
Key key;
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ enum class ID : size_t {
|
|||||||
SEM_DESTROY=5,
|
SEM_DESTROY=5,
|
||||||
SEM_WAIT=6,
|
SEM_WAIT=6,
|
||||||
SEM_SIGNAL=7,
|
SEM_SIGNAL=7,
|
||||||
//SYS_GETPID=8,
|
SYS_GETPID = 8,
|
||||||
SYS_EXIT= 9,
|
SYS_EXIT = 9,
|
||||||
//SYS_KILL=10
|
//SYS_KILL=10
|
||||||
};
|
};
|
||||||
} // namespace Syscall
|
} // namespace Syscall
|
||||||
@@ -59,6 +59,10 @@ extern "C" ssize_t sys_safe_call(Syscall::ID id, size_t p1, size_t p2,
|
|||||||
return sys_call(Syscall::ID::SEM_SIGNAL, fd, semid,0,0,0);
|
return sys_call(Syscall::ID::SEM_SIGNAL, fd, semid,0,0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[gnu::always_inline]] static inline int sys_getpid(){
|
||||||
|
return sys_call(Syscall::ID::SYS_GETPID, 0,0,0,0,0);
|
||||||
|
}
|
||||||
|
|
||||||
[[gnu::always_inline]] static inline void sys_exit(){
|
[[gnu::always_inline]] static inline void sys_exit(){
|
||||||
sys_call(Syscall::ID::SYS_EXIT, 0, 0, 0, 0, 0);
|
sys_call(Syscall::ID::SYS_EXIT, 0, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,8 +20,7 @@ void Application::action() { // NOLINT
|
|||||||
|
|
||||||
//sys_test(1,2,3,4,5);
|
//sys_test(1,2,3,4,5);
|
||||||
|
|
||||||
unsigned id = 0;
|
unsigned id = sys_getpid();
|
||||||
while (&apps[id++] != this);
|
|
||||||
char text[] = "testX";
|
char text[] = "testX";
|
||||||
text[4] = 0x30+id;
|
text[4] = 0x30+id;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user