osdev.labedz.org

Tworzenie procesów

Tworzeniem nowych procesów zajmuje się procedura create_task. Jej parametrem jest wskaźnik adresu pamięci w którym zaczyna się kod dodawanego procesu.

pid_t create_task(void *task);

Procedura ta ma za zadanie zarezerwowanie obszaru pamięci na stos i katalog stron aplikacji, oraz dodanie nowego zadania do tablicy procesów. Po poprawnym wykonaniu tych zadań procedura ta zwraca identyfikator utworzonego procesu PID.

Do dodawania nowych zadań do tablicy procesów służy procedura add_task. Jako parametr podaje się wskaźnik adresu pamięci w którym zaczyna się dodawane zadanie adres obszaru pamięci przeznaczony na stos tej aplikacji, oraz adres obszaru pamięci przeznaczonej na katalog stron aplikacji.

int add_task(void *task, dword stack_address, dword *page_dir);

Funkcja ta zwraca numer pozycji w tablicy procesów pod który nowe zadanie zostało wpisane.

Usuwaniem procesów zajmuje się procedura remove_task. Ma ona za zadanie usunięcie procesu z odpowiedniej kolejki procesów, zwolnienie zarezerwowanych przez proces stron pamięci, oraz usunięcie kontekstu procesów z tablicy procesów.