Project2. User Programming - From Boot to User Program

김민호·2025년 11월 25일

pintos

목록 보기
6/9

Phase 1: 하드웨어 초기화 (Assembly)

  1. _start ()
    • 컴퓨터 전원이 켜지면 가장 먼저 실행되는 코드입니다.
    • CPU를 64비트 모드로 설정하고 기본적인 메모리 관리(페이징)를 준비합니다.
    • 모든 준비가 끝나면 C언어 세상의 시작점인 main() 함수를 호출합니다.

Phase 2: 커널 초기화 및 멀티태스킹 활성화 (C)

  1. main()
    • thread_init(): 현재 실행 중인 코드(main)를 첫 번째 커널 스레드로 등록합니다.
    • (기타 초기화): 파일 시스템, 타이머 등 다른 모든 커널 모듈을 초기화합니다.
    • thread_start(): 인터럽트와 스케줄러를 활성화합니다. 이 순간부터 핀토스는 여러 스레드를 전환하며 실행할 수 있는 멀티태스킹 운영체제가 됩니다.
    • run_actions(): 부팅 인자를 분석하여 무엇을 실행할지 결정합니다.

Phase 3: 첫 사용자 프로그램 실행

  1. run_actions() → run_task()

    • 사용자가 run my_program과 같은 명령을 내리면 run_task("my_program") 함수가 호출됩니다.
  2. run_task() → process_create_initd() 

    • run_task는 첫 사용자 프로세스를 만들기 위해 process_create_initd("my_program")를 호출합니다.
  3. process_create_initd() → thread_create()

    • process_create_initd는 thread_create를 호출하여 새로운 커널 스레드를 생성합니다.
    • 핵심: 이때 thread_create에 initd 함수의 주소를 넘겨주며, "이 스레드가 실행될 차례가 오면 initd 함수부터 시작해라" 라고 알려줍니다.
  4. (스케줄러에 의해) → initd() 실행

    • thread_create로 만들어진 새 스레드의 실행 순서가 되면, 스케줄러는 CPU의 제어권을 이 스레드에 넘깁니다.
    • 스레드는 약속된 대로 initd 함수부터 실행을 시작합니다.
    • initd 함수는 최종적으로 process_exec("my_program")을 호출하여, 디스크에서 프로그램을 읽어 메모리에 올리고 실행하는 모든 과정을 담당합니다.

profile
개발자를 꿈꾸고 있어요

0개의 댓글