본문 바로가기
코딩코딩/운영체제

쉘이 명령어를 실행시키는 방법

by g0n1 2022. 5. 30.
728x90

초기 상태: 쉘이 사용자의 입력을 wait하고 있음

  1. 사용자가 "ls"를 입력
  2. 쉘 프로세스는 fork로 자식 프로세스를 만든다.(아직 CPU는 부모 프로세스에게 있음)
  3. 쉘 프로세스는 나머지 명령어를 수행하고 wait를 호출한다.(waiting queue, sleeping queue에 간다)
  4. context_switching이 실행되고 자식 프로세스에게 CPU가 주어진다.
  5. 자식 프로세스는 exec를 호출해 disk에서 1에서 받은 command line에 해당하는 실행가능파일을 load해 자신의 이미지를 덮어쓴다.
    (원래는 부모 프로세스와 같은 이미지였으나 새로운 이미지가 덮어써진다.)
  6. exec 덕분에 자식은 새로 덮어쓴 이미지의 main함수부터 새출발한다.
  7. 자식은 main 루틴을 수행하고, exit을 호출한다.
  8. exit으로 인해 context switching이 발생함과 동시에 잠들었던 쉘이 다시 깨어난다.

 

728x90

'코딩코딩 > 운영체제' 카테고리의 다른 글

[번역] 왜 caller-saved와 callee-saved가 필요할까?  (0) 2022.06.05
Paging, MLP4, Linux 페이징  (0) 2022.06.01
kernel_of_linux  (0) 2022.05.30
PCB(Process Control Block)  (0) 2022.05.30

댓글