mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-18 01:01:57 -04:00
Store the name of the processes
This commit is contained in:
parent
d660e4fba0
commit
68cbf3d3d5
@ -68,6 +68,8 @@ struct process_t {
|
|||||||
volatile interrupt::syscall_regs* context;
|
volatile interrupt::syscall_regs* context;
|
||||||
|
|
||||||
std::vector<segment_t> segments;
|
std::vector<segment_t> segments;
|
||||||
|
|
||||||
|
std::string name;
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr const size_t program_base = 0x8000000000;
|
constexpr const size_t program_base = 0x8000000000;
|
||||||
|
@ -56,8 +56,8 @@ void set_working_directory(const std::vector<std::string>& directory);
|
|||||||
void block_process_light(pid_t pid);
|
void block_process_light(pid_t pid);
|
||||||
//TODO Maybe do that for unblock as well!
|
//TODO Maybe do that for unblock as well!
|
||||||
|
|
||||||
process_t& create_kernel_task(char* user_stack, char* kernel_stack, void (*fun)());
|
process_t& create_kernel_task(const char* name, char* user_stack, char* kernel_stack, void (*fun)());
|
||||||
process_t& create_kernel_task_args(char* user_stack, char* kernel_stack, void (*fun)(void*), void* data);
|
process_t& create_kernel_task_args(const char* name, char* user_stack, char* kernel_stack, void (*fun)(void*), void* data);
|
||||||
void queue_system_process(pid_t pid);
|
void queue_system_process(pid_t pid);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -46,6 +46,8 @@ std::string get_value(uint64_t pid, const std::string& name){
|
|||||||
return process.process.system ? "true" : "false";
|
return process.process.system ? "true" : "false";
|
||||||
} else if(name == "priority"){
|
} else if(name == "priority"){
|
||||||
return std::to_string(process.process.priority);
|
return std::to_string(process.process.priority);
|
||||||
|
} else if(name == "name"){
|
||||||
|
return process.process.name;
|
||||||
} else {
|
} else {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
@ -63,6 +65,7 @@ procfs::procfs_file_system::procfs_file_system(std::string mp) : mount_point(mp)
|
|||||||
standard_contents.emplace_back("state", false, false, false, 0);
|
standard_contents.emplace_back("state", false, false, false, 0);
|
||||||
standard_contents.emplace_back("system", false, false, false, 0);
|
standard_contents.emplace_back("system", false, false, false, 0);
|
||||||
standard_contents.emplace_back("priority", false, false, false, 0);
|
standard_contents.emplace_back("priority", false, false, false, 0);
|
||||||
|
standard_contents.emplace_back("name", false, false, false, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
procfs::procfs_file_system::~procfs_file_system(){
|
procfs::procfs_file_system::~procfs_file_system(){
|
||||||
|
@ -107,8 +107,8 @@ void network::finalize(){
|
|||||||
auto* tx_user_stack = new char[scheduler::user_stack_size];
|
auto* tx_user_stack = new char[scheduler::user_stack_size];
|
||||||
auto* tx_kernel_stack = new char[scheduler::kernel_stack_size];
|
auto* tx_kernel_stack = new char[scheduler::kernel_stack_size];
|
||||||
|
|
||||||
auto& rx_process = scheduler::create_kernel_task_args(rx_user_stack, rx_kernel_stack, &rx_thread, &interface);
|
auto& rx_process = scheduler::create_kernel_task_args("net_rx", rx_user_stack, rx_kernel_stack, &rx_thread, &interface);
|
||||||
auto& tx_process = scheduler::create_kernel_task_args(tx_user_stack, tx_kernel_stack, &tx_thread, &interface);
|
auto& tx_process = scheduler::create_kernel_task_args("net_tx", tx_user_stack, tx_kernel_stack, &tx_thread, &interface);
|
||||||
|
|
||||||
rx_process.ppid = 1;
|
rx_process.ppid = 1;
|
||||||
tx_process.ppid = 1;
|
tx_process.ppid = 1;
|
||||||
|
@ -229,7 +229,7 @@ void queue_process(scheduler::pid_t pid){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void create_idle_task(){
|
void create_idle_task(){
|
||||||
auto& idle_process = scheduler::create_kernel_task(new char[scheduler::user_stack_size], new char[scheduler::kernel_stack_size], &idle_task);
|
auto& idle_process = scheduler::create_kernel_task("idle", new char[scheduler::user_stack_size], new char[scheduler::kernel_stack_size], &idle_task);
|
||||||
|
|
||||||
idle_process.ppid = 0;
|
idle_process.ppid = 0;
|
||||||
idle_process.priority = scheduler::MIN_PRIORITY;
|
idle_process.priority = scheduler::MIN_PRIORITY;
|
||||||
@ -240,7 +240,7 @@ void create_idle_task(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void create_init_task(){
|
void create_init_task(){
|
||||||
auto& init_process = scheduler::create_kernel_task(new char[scheduler::user_stack_size], new char[scheduler::kernel_stack_size], &init_task);
|
auto& init_process = scheduler::create_kernel_task("init", new char[scheduler::user_stack_size], new char[scheduler::kernel_stack_size], &init_task);
|
||||||
|
|
||||||
init_process.ppid = 0;
|
init_process.ppid = 0;
|
||||||
init_process.priority = scheduler::MIN_PRIORITY + 1;
|
init_process.priority = scheduler::MIN_PRIORITY + 1;
|
||||||
@ -249,7 +249,7 @@ void create_init_task(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void create_gc_task(){
|
void create_gc_task(){
|
||||||
auto& gc_process = scheduler::create_kernel_task(new char[scheduler::user_stack_size], new char[scheduler::kernel_stack_size], &gc_task);
|
auto& gc_process = scheduler::create_kernel_task("gc", new char[scheduler::user_stack_size], new char[scheduler::kernel_stack_size], &gc_task);
|
||||||
|
|
||||||
gc_process.ppid = 1;
|
gc_process.ppid = 1;
|
||||||
gc_process.priority = scheduler::MIN_PRIORITY + 1;
|
gc_process.priority = scheduler::MIN_PRIORITY + 1;
|
||||||
@ -260,7 +260,7 @@ void create_gc_task(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void create_post_init_task(){
|
void create_post_init_task(){
|
||||||
auto& post_init_process = scheduler::create_kernel_task(new char[scheduler::user_stack_size], new char[scheduler::kernel_stack_size], &post_init_task);
|
auto& post_init_process = scheduler::create_kernel_task("post_init", new char[scheduler::user_stack_size], new char[scheduler::kernel_stack_size], &post_init_task);
|
||||||
|
|
||||||
post_init_process.ppid = 1;
|
post_init_process.ppid = 1;
|
||||||
post_init_process.priority = scheduler::MAX_PRIORITY;
|
post_init_process.priority = scheduler::MAX_PRIORITY;
|
||||||
@ -632,6 +632,8 @@ int64_t scheduler::exec(const std::string& file, const std::vector<std::string>&
|
|||||||
|
|
||||||
auto& process = new_process();
|
auto& process = new_process();
|
||||||
|
|
||||||
|
process.name = file;
|
||||||
|
|
||||||
if(!create_paging(buffer, process)){
|
if(!create_paging(buffer, process)){
|
||||||
logging::log(logging::log_level::DEBUG, "scheduler:exec: Impossible to create paging\n");
|
logging::log(logging::log_level::DEBUG, "scheduler:exec: Impossible to create paging\n");
|
||||||
|
|
||||||
@ -896,12 +898,13 @@ void scheduler::set_working_directory(const std::vector<std::string>& directory)
|
|||||||
pcb[current_pid].working_directory = directory;
|
pcb[current_pid].working_directory = directory;
|
||||||
}
|
}
|
||||||
|
|
||||||
scheduler::process_t& scheduler::create_kernel_task(char* user_stack, char* kernel_stack, void (*fun)()){
|
scheduler::process_t& scheduler::create_kernel_task(const char* name, char* user_stack, char* kernel_stack, void (*fun)()){
|
||||||
auto& process = new_process();
|
auto& process = new_process();
|
||||||
|
|
||||||
process.system = true;
|
process.system = true;
|
||||||
process.physical_cr3 = paging::get_physical_pml4t();
|
process.physical_cr3 = paging::get_physical_pml4t();
|
||||||
process.paging_size = 0;
|
process.paging_size = 0;
|
||||||
|
process.name = name;
|
||||||
|
|
||||||
// Directly uses memory of the executable
|
// Directly uses memory of the executable
|
||||||
process.physical_user_stack = 0;
|
process.physical_user_stack = 0;
|
||||||
@ -931,8 +934,8 @@ scheduler::process_t& scheduler::create_kernel_task(char* user_stack, char* kern
|
|||||||
return process;
|
return process;
|
||||||
}
|
}
|
||||||
|
|
||||||
scheduler::process_t& scheduler::create_kernel_task_args(char* user_stack, char* kernel_stack, void (*fun)(void*), void* data){
|
scheduler::process_t& scheduler::create_kernel_task_args(const char* name, char* user_stack, char* kernel_stack, void (*fun)(void*), void* data){
|
||||||
auto& process = scheduler::create_kernel_task(user_stack, kernel_stack, reinterpret_cast<void(*)()>(fun));
|
auto& process = scheduler::create_kernel_task(name, user_stack, kernel_stack, reinterpret_cast<void(*)()>(fun));
|
||||||
|
|
||||||
// rdi is the first register used for integers parameter passing
|
// rdi is the first register used for integers parameter passing
|
||||||
process.context->rdi = reinterpret_cast<size_t>(data);
|
process.context->rdi = reinterpret_cast<size_t>(data);
|
||||||
|
@ -186,7 +186,7 @@ ACPI_STATUS AcpiOsExecute(ACPI_EXECUTE_TYPE /*type*/, ACPI_OSD_EXEC_CALLBACK fun
|
|||||||
auto* user_stack = new char[scheduler::user_stack_size];
|
auto* user_stack = new char[scheduler::user_stack_size];
|
||||||
auto* kernel_stack = new char[scheduler::kernel_stack_size];
|
auto* kernel_stack = new char[scheduler::kernel_stack_size];
|
||||||
|
|
||||||
auto& process = scheduler::create_kernel_task_args(user_stack, kernel_stack, function, context);
|
auto& process = scheduler::create_kernel_task_args("acpi", user_stack, kernel_stack, function, context);
|
||||||
process.ppid = scheduler::get_pid();
|
process.ppid = scheduler::get_pid();
|
||||||
|
|
||||||
logging::logf(logging::log_level::DEBUG, "ACPICA new process %u\n", process.pid);
|
logging::logf(logging::log_level::DEBUG, "ACPICA new process %u\n", process.pid);
|
||||||
|
@ -58,7 +58,7 @@ const char* state_str(uint64_t state){
|
|||||||
case 1:
|
case 1:
|
||||||
return "NEW";
|
return "NEW";
|
||||||
case 2:
|
case 2:
|
||||||
return "READ";
|
return "READY";
|
||||||
case 3:
|
case 3:
|
||||||
return "RUNNING";
|
return "RUNNING";
|
||||||
case 4:
|
case 4:
|
||||||
@ -79,6 +79,8 @@ const char* state_str(uint64_t state){
|
|||||||
int main(int /*argc*/, char* /*argv*/[]){
|
int main(int /*argc*/, char* /*argv*/[]){
|
||||||
auto fd = open("/proc/");
|
auto fd = open("/proc/");
|
||||||
|
|
||||||
|
printf("PID PPID Pri State Name\n");
|
||||||
|
|
||||||
if(fd.valid()){
|
if(fd.valid()){
|
||||||
auto info = stat(*fd);
|
auto info = stat(*fd);
|
||||||
|
|
||||||
@ -101,11 +103,12 @@ int main(int /*argc*/, char* /*argv*/[]){
|
|||||||
auto system = read_file(base_path + entry_name + "/system") == "true";
|
auto system = read_file(base_path + entry_name + "/system") == "true";
|
||||||
auto priority = parse(read_file(base_path + entry_name + "/priority"));
|
auto priority = parse(read_file(base_path + entry_name + "/priority"));
|
||||||
auto state = parse(read_file(base_path + entry_name + "/state"));
|
auto state = parse(read_file(base_path + entry_name + "/state"));
|
||||||
|
auto name = read_file(base_path + entry_name + "/name");
|
||||||
|
|
||||||
if(system){
|
if(system){
|
||||||
printf("%u %u %u %s [kernel]\n", pid, ppid, priority, state_str(state));
|
printf("%3u %4u %3u %10s %s [kernel]\n", pid, ppid, priority, state_str(state), name.c_str());
|
||||||
} else {
|
} else {
|
||||||
printf("%u %u %u %s \n", pid, ppid, priority, state_str(state));
|
printf("%3u %4u %3u %10s %s \n", pid, ppid, priority, state_str(state), name.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!entry->offset_next){
|
if(!entry->offset_next){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user