Phase 1: 하드웨어 초기화 (Assembly)
_start ()main() 함수를 호출합니다.Phase 2: 커널 초기화 및 멀티태스킹 활성화 (C)
main()thread_init(): 현재 실행 중인 코드(main)를 첫 번째 커널 스레드로 등록합니다.(기타 초기화): 파일 시스템, 타이머 등 다른 모든 커널 모듈을 초기화합니다.thread_start(): 인터럽트와 스케줄러를 활성화합니다. 이 순간부터 핀토스는 여러 스레드를 전환하며 실행할 수 있는 멀티태스킹 운영체제가 됩니다.run_actions(): 부팅 인자를 분석하여 무엇을 실행할지 결정합니다.Phase 3: 첫 사용자 프로그램 실행
run_actions() → run_task()
run my_program과 같은 명령을 내리면 run_task("my_program") 함수가 호출됩니다.run_task() → process_create_initd()
run_task는 첫 사용자 프로세스를 만들기 위해 process_create_initd("my_program")를 호출합니다.process_create_initd() → thread_create()
process_create_initd는 thread_create를 호출하여 새로운 커널 스레드를 생성합니다.thread_create에 initd 함수의 주소를 넘겨주며, "이 스레드가 실행될 차례가 오면 initd 함수부터 시작해라" 라고 알려줍니다.(스케줄러에 의해) → initd() 실행
thread_create로 만들어진 새 스레드의 실행 순서가 되면, 스케줄러는 CPU의 제어권을 이 스레드에 넘깁니다.initd 함수부터 실행을 시작합니다.initd 함수는 최종적으로 process_exec("my_program")을 호출하여, 디스크에서 프로그램을 읽어 메모리에 올리고 실행하는 모든 과정을 담당합니다.