혼자 공부하는 운영체제 읽고 면접 준비 - 프로세스와 스레드

피아노과 개발자도전?·2023년 2월 10일
0

Today I learned

목록 보기
58/75
post-thumbnail
post-custom-banner

이번에는 컴퓨터 구조에 이어 다음학기 전공필수과목인 운영체제입니다.

운영체제는 1년 전 군대에서 핸드폰으로 대학 강의 하나를 들었을 때 처음 접해봤습니다. 그때는 막연하게 '내가 나중에 들을 전공필수과목이네? 한번 들어나 볼까?' 라는 마인드로 들었던 것 같습니다.

물론 컴퓨터가 도데체 어떻게 작동되는지에 대한 궁금증도 컸었습니다.

물론 처음이라 어차피 자세한 내용은 까먹을 확률이 높으니 주요 개념들만 이해해서 나중에 단어를 들으면 대충 뭔지 떠올릴 수 있는 정도를 목표로 공부했었습니다.

1년이 지나고 이 책을 공부하기 전 얼핏 기억나는것은 가상 메모리, 스케쥴링, 동기화 문제, 교착상태 등이었습니다. 이번에 확실히 정리해서 A를 노려보겠습니다.






운영체제란

CPU, 메모리, 보조기억장치, 입출력장치등을 시스템 자원이라고 하는데, 실행할 프로그램에 자원을 할당하고 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램

  • 메모리 내 커널영역에 따로 적재됨
  • 실행할 프로그램을 메모리에 적재/삭제하며 관리
  • 최대한 공정하게 여러 프로그램에 CPU 할당
  • 운영체제와의 대화로 하드웨어와 프로그램을 더 깊이 이해하고 문제 해결의 실마리를 찾을 수 있음


커널

운영체제의 핵심 서비스(프로그램이 올바르고 안전하게 실행되게 하는 기능)를 담당하는 부분

이중 모드

CPU가 명령어를 실행하는 모드

  • 사용자 모드 : 커널 영역의 코드를 실행할 수 없음
  • 커널 모드 : 커널 영역의 코드를 실행할 수 있어 자원접근 등 모든 명령어 실행가능 - 운영체제의 실행모드

사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청(system call-인터럽트의 일종)을 보내 커널 모드로 전환해야 합니다.




프로세스

실행중인 프로그램 - 보조기억장치에 저장된 프로그램(데이터 덩어리)을 메모리에 적재하고 실행하는 순간 프로세스가 된다.

프로세스 제어 블록(PCB)

운영체제는 프로세스의 실행순서 관리, 자원 배분을 위해 프로세스와 관련된 정보를 저장하는 자료구조인 프로세스 제어 블록(PCB)를 이용합니다. 아래의 내용이 담겨있습니다.

  • 프로세스 ID(PID) : 프로세스 식별을 위한 고유 번호
  • 레지스터 값 : 자신의 차례가 돌아오면 이전까지 사용했던 레지스터 값들이 필요
  • 프로세스 상태
  • CPU 스케쥴링 정보 : 프로세스가 언제 어떤 순서로 CPU를 할당받을지에 대한 정보
  • 메모리 관리 정보 : 프로세스의 주소를 알기 위한 페이지 테이블 등의 정보
  • 사용한 파일과 입출력장치 목록


문맥 교환(context switching)

프로세스가 다른 프로세스에 CPU사용을 양보할 때, 각종 레지스터 값, 메모리 정보, 파일이나 입출력장치 등 지금까지의 정보를 PCB에 백업해야 하는데, 이 정보를 문맥이라고 합니다. 그 후, 새로운 프로세스의 문맥을 복구하는데, 이것을 문맥 교환(context switching)이라고 합니다.



프로세스의 메모리 영역

  • 코드 영역 : 실행할 수 있는 코드(기계어)로 이루어진 명령어가 저장됨 - 읽기 전용 공간
  • 데이터 영역 : 프로그램이 실행되는 동안 유지할 데이터가 저장됨 - 전역변수, 정적변수 등
  • 힙 영역 : 직접 할당할 수 있는 저장공간 - 메모리 공간을 할당하면 반환도 해줘야함
  • 스택 영역 : 데이터를 일시적으로 저장하는 공간 - 매개변수, 지역변수 등


프로세스 상태

  • 생성 상태 : 이제 막 메모리에 적재되어 PCB를 할당받은 상태
  • 준비 상태 : 당장 CPU를 할당받아 실행할 수 있지만, 차례를 기다리는 상태
  • 실행 상태 : 일정 시간동안 CPU를 사용하다가, 시간이 끝나면(타이머 인터럽트 발생) 준비 상태가 되고, 입출력장치를 사용하면 대기 상태가 된다.
  • 대기 상태 : 입출력을 끝낼때까지(입출력 완료 인터럽트) 기다리는 상태. 입출력이 완료되면 준비 상태로 간다.
  • 종료 상태 : 종료된 상태. 운영체제는 PCB와 프로세스가 사용한 메모리를 정리함.


프로세스 계층 구조

프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있습니다. 부모와 자식 프로세스가 됩니다. 컴퓨터가 부팅될 때 실행되는 최초의 프로세스가 자식 프로세스들을 생성하고, 자식이 또 생성하고를 반복합니다.

fork를 통해 자신의 복사본을 자식 프로세스로 생성하고, 복사본은 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체합니다. 저번학기 시스템 프로그래밍 시간에 쉘 만들기로 실습해 봐서 익숙합니다.





스레드

프로세스를 구성하는 실행 단위.

  • 프로세스 내에서 각기 다른 스레드ID, 레지스터 값, 스택으로 구성됨.
  • 프로세스 자원을 공유하며 실행됨.

동일한 작업을 수행하는 단일 스레드 프로세스 여러개와 하나의 프로세스를 여러 스레드로 실행하는 것의 차이는 무엇일까?

  • 프로세스를 fork하면 같은 프로세스가 통째로 두개가 적재되어 낭비가 될 수 있음

  • 이에 반해 스레드들은 프로세스의 자원을 공유하여 메모리를 효율적으로 사용하고 협력과 통신에 유리함

  • 멀티프로세스 환경은 하나의 프로세스에 문제가 생겨도 다른 프로세스엔 지장이 없지만, 멀티스레드 환경에선 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있음

profile
공부한 내용 정리
post-custom-banner

0개의 댓글