[운영체제] 2주차 스터디

톰톰·2023년 9월 22일
0

질문

  1. 프로그램에 대해 설명해주세요.

    실행 파일 형태로 디스크에 저장되어 있는 기계어의 집합

    • 프로그램이 실행되면 physical memory에 올라가서 프로세스가 된다.
    • 프로세스는 자신만의 독자적인 메모리 공간을 가지게되고, 해당 프로세스가 CPU 제어권을 잡게 되면 자신에게 할당된 메모리 공간을 사용하여 연산을 수행한다.
      • 코드 영역에 있는 기계어를 수행
      • 데이터 영역에 있는 전역변수를 참조
      • 스택 영역에 있는 함수 호출 관련 정보를 참조
  2. 프로세스에 대해 설명해주세요.

    프로그램을 실행시켜 메모리에 올라간 상태

    • 각 프로세스는 자신만의 독자적인 가상 메모리 공간을 할당받는다.
    • 만약 메모리에 올라간 프로세스가 너무 많아서 경합이 심해질 경우, 현재 기계어를 실행하는데 필수적인 부분을 제외하고 Disk의 스왑 영역으로 내려가게 된다.
      • 이 때 프로세스는 physical memory에 올라가 있는 부분과 Disk의 swap 영역으로 내려온 부분을 구분할 수 없으며, 이를 포괄하는 개념인 가상 메모리 공간 자체를 자신의 메모리 공간이라고 인식하게 된다.
      • virtual memory와 physical memory는 주소 체계가 다르기 때문에, 주소 변환 작업이 필요하다.
  3. 프로세스의 메모리 공간에 대해 설명해주세요.

    일반 사용자 프로세스의 메모리 공간은 크게 세 파트로 분류된다.

    • 코드 영역 : 프로그램 실행을 위한 기계어가 존재한다.
    • 데이터 영역 : 전역변수 등의 정보가 존재한다.
    • 스택 영역 : 호출된 함수와 리턴 정보 등이 존재한다.

    커널도 사용자 프로세스와 동일한 구조의 메모리 공간을 가진다.

    • 코드 영역 : 커널의 함수 실행을 위한 기계어 (시스템 콜, 인터럽트 처리를 위한 코드..)
    • 데이터 영역 : 모든 하드웨어 및 프로세스 관리를 위한 데이터들
      • PCB
    • 스택 영역 : 실행 중인 프로세스들의 함수 호출 관련 정보
  4. 쓰레드에 대해 설명해주세요.

    CPU 실행의 기본 단위

    • 전통적인 프로세스 방식인 heavyweight process는 하나의 프로세스가 하나의 스레드를 이루는 구조
    • 이와 대비되는 lightweight process는 하나의 프로세스가 여러 개의 스레드를 이루는 구조를 가진다.
      • 이 때 CPU 수행 관련 정보인 PC, register set 및 stack 영역은 스레드별로 별도로 가진다.
      • 나머지 code, data 영역과 OS resource는 동료 스레드들과 공유한다.
  5. 프로세스와 쓰레드가 어떤 차이가 있는지 예시를 들어 설명해주세요.

    프로세스는 프로그램을 실행하여 메모리에 올려 놓은 것, 쓰레드는 해당 프로세스를 실행하는 단위

    • 프로세스가 단일 스레드로 구성된 heavyweight process와 프로세스가 다중 스레드로 구성된 lightweight 구조의 차이를 비교해보겠다.
    • 예시 : 웹브라우저에서 특정 사이트를 접근하는 경우
    • 사이트 URL을 넣으면 네트워크를 통해 웹서버에 해당 웹 페이지 내용을 요청한다.
      • 이 때 페이지에 text말고도 image가 존재한다면 image는 url을 통해 다시 웹서버에 요청하는 과정을 거쳐야 함.
    • 단일 스레드 환경이라면 네트워크로 웹 페이지의 내용을 요청하는 작업을 수행하는 동안 사용자는 아무 것도 볼 수가 없어 매우 답답할 것
    • 다중 스레드 환경이라면 스레드1이 네트워크로 image 등의 부가적인 요청을 할 동안 나머지 스레드가 현재 사용자에게 당장 보여줄 수 있는 text 등을 표시할 수 있다. → 사용자 입장에선 응답성 빠르다고 느낄 수 있다.
  6. 쓰레드의 메모리 공간(스택, 데이터, 코드)에대해 설명해주세요.

    • 코드 영역 : 프로그램의 실행에 필요한 기계어가 존재
      • 모든 스레드가 공유
    • 데이터 영역 : 전역변수 등의 데이터가 존재
      • 모든 스레드가 공유
    • 스택 영역 : 함수 호출 관련 정보가 존재
      • 각 스레드는 기계어의 다른 부분을 작업하므로 스레드별로 별도의 공간을 가짐
  7. 프로세스 제어블록(PCB)에 대해 설명해주세요.

    1. PCB에는 어떤 정보가 담겨있을까요?

    운영체제가 프로세스를 관리하기 위해 가지고 있는 정보

    • OS가 관리상 필요한 정보
      • 프로세스 상태
      • PID
      • 프로세스 우선순위 정보
    • CPU 수행 관련 하드웨어 값
      • Program counter : 해당 프로세스가 어느 위치까지 코드 실행했는지에 대한 메모리 주소값
      • Register set : 해당 프로세스가 기계어 실행하면서 사용한 레지스터 값들
    • 메모리 관련
      • Code, data, stack의 위치 정보
    • 파일 관련

    *멀티 스레드 환경에서는 pc, register set을 스레드 별로 가지게 된다.

  8. 쓰레드 제어블록(TCB)에 대해 설명해주세요.

    출처 : https://teraphonia.tistory.com/802

    출처 : https://teraphonia.tistory.com/802

    운영체제가 프로세스 내의 스레드를 관리하기 위해 가지고 있는 정보

    • CPU 수행관련 하드웨어 값
      • PC
      • Register Set
    • PCB를 가리키는 포인터
  9. 멀티 프로세스에 대해서 설명해주세요.

    하나의 프로그램에서 여러 개의 프로세스를 실행하는 것

    • 하나의 부모 프로세스가 여러 개의 자식 프로세스를 생성하므로서 다중 프로세스를 구성하는 구조
      • fork(), exec() 등의 시스템 콜을 통해 자신을 복제한 프로세스를 생성하고, 다른 프로그램을 씌워 동작시킨다.
    • 장점으로는
      • (안정성 확보) 각 프로세스가 독립적인 메모리 공간을 가지기 때문에 한 프로세스가 비정상 종료되어도 영향을 받지 않아 안정성을 확보할 수 있다는 점이 있다.
    • 단점으로는
      • (컨텍스트 스위칭 오버헤드)
      • (메모리 사용량 증가) 똑같은 기계어 코드의 여러 카피가 메모리에 올라가므로 사용량이 증가
  10. 멀티 쓰레딩에 대해서 설명해주세요.

    하나의 프로세스 안에 여러 개의 스레드가 존재하는 것

    • 각 스레드별로 CPU 수행 관련 공간은 별도로 가진다. (메모리 공간의 stack, PCB의 pc, registers)
    • 프로세스 내의 나머지 정보는 동료 스레드들과 공유한다. (메모리 공간의 코드 및 데이터, OS resources)
    • 장점으로는
      • 동일한 실행파일을 여러 개 띄우는 멀티 프로세스 방식보다 훨씬 효율적
      • 컨텍스트 스위칭으로 인한 오버헤드가 없다
    • 단점으로는
      • (안정성 문제) 하나의 스레드에서 문제가 발생하면 해당 프로세스 내에 있는 다른 스레드들에도 문제가 전파될 수 있다.
  11. 프로세스 수행 상태 변화 과정에 대해 설명해주세요.

    기본적으로 3가지 상태를 가진다.

    • 프로세스가 생성된 후 CPU 사용할 준비를 마치고 Ready Queue에서 대기하는 상태 → ready
    • CPU 제어권을 잡고 기계어를 실행 중인 상태 → running
    • 키보드 입력 및 IO 요청을 대기하느라 CPU를 사용할 수 없는 상태 → blocked

    위의 상태는 CPU를 사용하든 사용하고 있지 않든 뭔가를 수행하고 있는 상태이기 때문에 active 상태라고 간주.

    이 외에 중단 상태로 여겨지는 suspended 상태가 있다.

    • 메모리에 경합이 심해 swapper에 의해 메모리를 통째로 빼앗겨 메모리에 올라가 있지 않은 상태의 프로세스들이 이에 해당한다.
    • 이들은 외부에서 다시 메모리를 부여해 줘야 active 영역으로 돌아갈 수 있다.
  12. 문맥교환(context switch)에 대해 설명해주세요.

    1. 문맥교환은 언제 발생하나요?
    2. 문맥 교환 발생 과정에 대해서 조금 더 상세히 설명해주세요.

    문맥교환이란, 운영체제가 CPU 제어권을 다른 프로세스로 넘겨주기 위해서 CPU 내의 pc(program counter)와 register 집합 값을 교환하는 과정을 말한다.

    • 운영체제가 프로세스 a에서 프로세스 b로 CPU를 넘기는 상황을 예로 들어보면
      • 프로세스 a로부터 제어권을 뺏기 전 프로세스 a의 문맥 (pc과 연산에 필요한 register 들)을 커널 메모리에 존재하는 프로세스 a의 PCB(Process Control Block)에 저장한다.
      • 그리고 프로세스 b의 문맥을 커널 메모리의 프로세스 b PCB로부터 CPU로 로드한다.
    • 각 프로세스가 CPU 제어권을 얻었다 뺏겼다 하는데, 매번 CPU를 빼앗길 때 각 프로세스가 어디까지 수행되었는지에 대한 문맥을 저장해 놔야 다음번에 CPU을 얻었을 때 다음 지점부터 실행할 수 있기 때문에 이러한 작업을 거친다.
  13. fork() 명령어에 대해 설명해주세요.

    자식 프로세스를 생성하는 시스템 콜 명령어

    • 새로운 프로세스의 메모리 주소공간에 부모 프로세스의 컨텍스트가 정확히 카피되어 들어간다. (메모리 및 PCB)
      • 따라서 동일한 위치부터 시작된다.
    • 자식 프로세스는 보통 exec()를 통해 새로운 프로그램으로 덮어씌우는 방식으로 다른 작업을 수행한다.
  14. 프로세스끼리 협력하는 방법에 대해서 설명해주세요.

    원칙적으로 프로세스들은 자신의 메모리 공간을 타 프로세스와 공유하지 않고, 자신 혼자 운영체제 및 컴퓨터 자원을 사용한다는 전제하에 동작하기 때문에 협력이 불가능하다.

    따라서 협력이 필요한 상황에서는 프로세스 협력 매커니즘을 통해 협력을 한다.

    • 방법 2가지
      • message passing : 커널을 통해 메세지를 전달하는 방식
      • shared memory : 메모리를 서로 공유하는 방식

참고

회고

  1. 좋았던 점
    저번 주보다 시간 분배를 잘해서 컨디션 관리를 하면서 과제를 할 수 있었다.
    스레드 관련 내용을 자세히 공부할 수 있는 시간이라 좋았다. 스레드는 어떤 책을 보더라도 자주 등장하는 내용인데, 그 전까지는 피상적인 개념만 알고있었기 때문에 이해가 힘들었다. 이번 주차 스터디를 통해 스레드에 대해서 확실히 짚고 넘어갈 수 있어 앞으로 글을 이해하는 것이 훨씬 쉬워질 것 같다 :)

  2. 아쉬운 점
    딱히 없다.

0개의 댓글