두다지 서버 개발자 양성 프로그램 Week 5

5번 째 멘토링

운영체제 전반부 학습을 마치고, 학습한 내용에 대하여 멘토님과 이야기를 나누는 시간을 가졌다. 처음에는 (일명 '공룡책')을 기본서로 학습을 하려고 했으나, 모든 Chapter를 세세하게 다루고 있는 이론서를 혼자 공부하자니 크게 와닿지 않은 부분이 많아 KOCW에 올라와있는 반효경 교수님의 운영체제 강의를 통해 학습을 했다. 실무에서 운영체제가 어떻게 사용되고, 어떠한 문제가 발생할 수 있는지에 대한 교수님의 시기적절한 설명을 통해 운영체제를 공부하니 좋은 학습 결과를 얻을 수 있었다. 이후, 멘토님과 학습한 것을 정리하며 운영체제가 발전하게 된 배경에 대한 이해를 함께 얻을 수 있었다.

학습한 것에 대한 리뷰

  • 운영체제는 계속 변화하는 것이기 때문에 이론서의 내용은 맞는 것도 있고, 아닌 것도 있을 수 있음
    • 때문에 운영체제의 세세한 부분을 아는 것은 크게 중요치 않음
    • 자신의 도메인의 메인 운영체제(ex: Backend = Linux, Android = Android...)가 실제로 어떻게 동작하는지를 아는 것이 더 중요
    • 그러나, Linux는 모든 도메인에 사용되기 때문에 표준으로 알아두는 것이 좋음
  • PCB 내에 scheduling information에 따라, priority가 있을 수도 없을 수도 있음
    • ex) Roudn Robin의 경우, priority 있을 필요 없음

feedback

  • 개념 설명을 할 때 명료한 표현 사용
    • 내가 확신이 없으면, 듣는 이는 나에 대한 확신을 가질 수 없음
  • 개념 공부를 할 때는 zip -> 압축 해제 처럼 공부해야 함
    • 세세한 부분까지 모두 암기하는 것이 아니라 중요한 부분들을 모아 압축하는 식으로 공부
    • 3년 후에도 이전에 공부했던 내용 압축 해제 가능하도록!

Operation System

  • 운영체제는 Multi process를 제공하기 위해 발전
    • CPU Core를 1개 사용하던 시절, 사용자에게 여러 개의 Process가 동시에 돌아가고 있는 것처럼 느끼게 해주는 것
    • 그렇다면 Prcess는 무엇인가?
      • 실행 중인 프로그램(binary code)
  • CPU를 얻는 것은 일종의 '회의실 예약'과도 같은 개념
    • 선점/비선점의 문제
      1. 회의실 예약 시간을 정해놓고 정해진 시간이 되면 바로 사용 -> 선점
      2. 앞 팀의 사용이 모두 끝날 때 까지 기다렸다가 사용 -> 비선점
    • 우선 순위의 문제
      1. 직급에 따라 회의실 사용 -> 우선순위
      2. 직급에 상관 없이 회의실 사용 -> 비우선순위
  • 우선 순위를 사용하면 Starvation 현상이 발생할 수 있음
    • Aging 기법을 통해 해결 가능
  • General Purpose OS는 CPU 선점형이 기본
    • ex. Virus가 CPU 쥐고 안 놔주면 다른 프로세스들은 전혀 동작할 수 없게 됨
  • Windows XP는 Thread를 Type별로 나누어 다르게 처리
    • ex) UI thread는 우선순위 높여 CPU 빨리 주지만 빠르게 뺏음 -> 사용자 경험 증가
      • 사용자 경험을 증가시켜, 실제로는 작업 속도 빠르지 않지만 빠르다고 느끼게 하는 것
  • 스케줄링 알고리즘은 절대 복잡해서는 안 됨
    • 다음에 처리할 프로세스를 빠른 시간 안에 선택할 수 있어야 하기 때문
  • 프로세스 상태 등장 배경
    • CPU 할당에 혼돈을 제거하기 위해
      • 상태가 없다면 new, terminated 상태인 프로세스에게 CPU를 줄 수도 있음
    • 외부와 의사 결정을 하기 위해
      • readyblocked를 비교하여 사용!
        • 스케줄러는 blocked queue를 전혀 신경쓰지 않음
        • 스케줄링 되더라도 소용이 없기 때문
  • Why Thread?
    • Thread의 등장 배경
      • 대부분의 작업은 일을 나누어 수행하는 것이 좋음
      • 그러나, IPC 통하여 작업을 나누어 수행하는 것은 불편함
        • shared memory 지정해주고, init 해주고, 사용했던 garbage 값 지워주고...
      • 자원이 공유되는 프로세스 개념이 없을까?(esp. Memory) -> Heap 영역의 공유를 통한 Thread 등장
    • 스케줄링의 기본 단위는 Thread이기 때문에, 각각의 Thread들은 우선순위 정보도 따로 사용
    • but, 하나의 Thread가 죽으면 프로세스가 종료되기 때문에 다 같이 죽는 문제
      • 따라서 큰 서비스에서는 Multi-Thread로 프로그램을 짜는 것이 좋지 않음
      • Sharing을 위해서는 Redis와 같이 추상화된 Memory 영역을 사용
  • fork()로 프로세스를 생성할 때 부모/자식 관계를 만드는 이유?
    • 관리가 편해지기 때문
      • 부모가 자식 프로세스들을 프로세스 단위로 관리할 수 있게 됨
    • nohup: 자식 프로세스의 부모/자식 관계를 끊고 독립적인 프로세스로 변경(root만이 죽일 수 있게 됨)
      • 엄한 다른 부모 프로세스로부터 시그널을 받지 않게 하기 위함
      • 프로세스를 service로 사용해야 할 때 많이 사용

다음 주 까지의 assignment

  • 공룡책 Ch.10 까지 공부
    • Disk management는 SDD의 등장으로 중요성 감소
  • Spinlock의 실제 구현 이해하기
    • Linux에서 실제로 어떻게 구현되어 있는지?
    • Hardware에게 어떠한 도움을 받아 동작하는지?
  • Spinlock, Semaphores, Producer & Consumer problem 구현하기 in C lang
  • Thread의 join() 기능 구현해보기


+ Recent posts