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

4번 째 멘토링

한 주 간 컴퓨터구조론, Linux 그리고 Vim에 대한 학습을 마친 후, 학습한 지식에 대한 리뷰 시간을 가져보았다. 일주일 간 책을 기반으로 전산학의 기본 지식들을 학습하면서 내가 얻은(혹은 공부한) 지식에 대한 확신을 잘 얻지 못하였는데, 이번 시간 내가 학습한 것을 남에게 직접 설명하는 시간을 가져보며 학습한 지식을 내것으로 소화할 수 있었던 시간이었다. 단순히 책을 읽고 학습이 완료되었다고 생각하는 것이 아니라, 학습한 지식을 소화하여 내 것으로 만들 수 있는 시간을 충분히 가져갈 수 있어야 한다는 생각을 다시금 느낄 수 있었던 시간이었다.

학습한 것에 대한 리뷰

  • Vim에서 중요한 옵션
    • textwidth: 80-Columns Rule을 지키기 위한 옵션
    • expandtab: Tab이 아닌 4-spaces를 사용하기 위한 옵션
    • Syntax Highlight
  • 리눅스에서는 Quotation으로 원치 않는 확장 막아주는 것이 중요
    • 쉘 스크립트 작성에 중요한 요소이기 때문
    • Should know difference between Double Quotation and Single Quotation!
      • Double Quotation: 변수, `(backtick), escape 문자 등 특정 대상에 대한 확장 허용
      • Single Quotation: 어떠한 확장도 허용하지 않음
>> $ echo "$(echo "upg")"
upg
>> $ echo '$(echo "upg")'
$(echo "upg")
  • su는 다른 유저로 전환을 하기 위한 명령어
    • default 값이 Super user인 것이며, 인자를 넣어줌으로써 다른 User로의 전환이 가능

feedback

  • 전산학에 나오는 용어를 적재적소에 정확하게 사용하여 설명해야 함
    • 대명사 사용은 지양하는 것이 좋음(ex: 그거, 저거...)
    • 어떠한한 언어다.. 어떠한 프레임워크다.. 어떠한한 하드웨어 구성 요소이다.. 와 같이 정확한 끝말을 사용해야 함
  • 전산학의 경우, 자연과학과 달리 필요에 의하여 만들어진 것이기 때문에 왜 그러한 Concepts가 생겨난 것인지에 대한 이유를 잘 이해하고, 설명할 수 있어야 함
    • 어떤 배경에서 이러한 개념이 발생한 것인가?
    • 이전 기술의 한계, 소비자의 요구 등..
  • 이전 기술의 경우: 왜 그 당시 유행할 수 있었는지, 어떻게 다른 기술로 대체되어 왔는지에 대한 이해
  • 현재 기술의 경우: 현재 어느 분야에서 많이 사용되고 있는지 이해

Computer Architecture

Cache

  • Cache는 전산학에서는 저장장치이며, 현실 세계에서는 일종의 컨닝 페이퍼
    • Cache가 기능할 수 있는 이유는 Locality의 원리 때문
    • 결국, locality가 없는 곳에서는 cache를 사용하지 않아야 함
    • hit ratio가 0.9 이상이 되어야 사용하는 데 의미가 있음
      • hit ratio가 높다는 것은 locality가 크다는 의미!
  • Cache에서 가장 큰 문제는 데이터 불일치
    • 따라서 쓰기 정책을 잘 아는 것이 중요함
    • Write-through, Write-back...
  • 사상 정책: Cache를 어떤 구조로 가져갈 것인가?
    • 직접 사상은 O(1)로 해당 value을 찾아올 수 있지만, 해시 펑션에 의해 캐시 공간을 낭비할 가능성이 있음
    • 직접-연관 사상, 세트-연관 사상이 나오게 된 배경!
  • Web Cache: 이미지와 같은 경우 사이트에서 매번 가져오는 것이 비효율
    • 크기도 크고, 변할 가능성이 크지 않기 때문에
    • 따라서, 이미지에 대한 해당 url 요청을 Caching하여 정보 제공
      • 이 때는 Disk가 Cache의 역할 수행
      • Web으로부터 가져오는 것 보다는 Disk가 빠르기 때문에!
    • 그러나 해당 url 내 정보가 바뀐 경우는?
      • timeout 정책 적용을 통해 해결 가능. 일정 시간 지나면 cache된 url 정보 삭제
      • 혹은 브라우저의 캐시 기능을 해제하여 해결 가능 -> 개발할 때는 브라우저의 캐시 옵션 제거하고 하는 것이 좋음
  • CDN(Content Delivery Network): 콘텐츠를 효율적으로 전달하기 위해 여러 노드를 가진 네트워크에 데이터를 저장하여 제공하는 시스템
    • ex) 리니지 M이 업데이트 됨
    • NC Soft에 있는 전사 네트워크에는 기존 리니지 프로그램을 넣어 놓고, CDN에는 패치 프로그램 넣음

    • 새로운 콘텐츠(패치 프로그램)는 무조건 받을 수 밖에 없기 때문에 hit ratio(kinda)는 100%에 달하게 됨


Pipelining

  • 슈퍼파이프라이닝이란 가장 오래 걸리는 작업을 더 잘게 나누어서 수행하도록 하는 것
  • 각 CPU 코어가 자신의 일을 수행하지 못하고 idle 상태에 들어가는 것이 모두 Hazard
  • 파이프라인을 증축시키고자 하는 것이 슈퍼스칼라
  • 과거의 분기 예측 문제: 분기 되는 것이 common인가? 분기 되지 않는 것이 common인가?
    • ex) Error case에서의 분기문의 경우, 대부분의 경우 프로그램이 정상 작동할 것으로 가정하여 분기 되지 않는 것이 Common case로 설정
    • 현대에서는 이러한 최적화 문제가 잘 해결되어 있음
  • 4-line Pipeline이 가격 대비 성능이 좋기 때문에 사용되었던 것이지, 항상 4-line을 사용할 필요는 없음

System bus

  • 시스템 버스에서 가장 중요한 개념은 버스 중재
    • 복수의 버스 마스터가 동시에 Signal을 내면 다 같이 무너지기 때문!
  • Asynchronous I/O
    • Push:: 특정 event 발생하면 Push 알림
      • ex) 네이버 카페 키워드 알림
      • ex) 특정 프로세스가 DMA 기다리며 sleep 하는 경우
    • SOLID에서의 DIP(Dependency Inversion Principle)
      • ex) Hollywood 오디션의 예

        1000명의 오디션 지원자가 오디션
        지원자들의 합격 문의 전화로 인해 업무 마비
        전화 수신을 거부하고, 발표일에 일괄 발표하겠음!
        지원자 to 영화사에서 영화사 to 지원자로 의존성의 역전

    • Event Driven: Event가 발생하면 정보 제공
    • Observer Pattern: 등록한 Observer에게 event 발생하면 정보 제공
    • Semaphore: OS에서 다시 다룰 예정
  • Synchronous I/O
    • Polling: 궁금한 정보에 대해 계속 접근하는 것 -> 비싼 연산
    • Spinlock: OS에서 다시 다룰 예정
  • Asynchronous I/O의 단점
    • 읽어올 정보가 거의 항상 있을 경우
      • Context switch로 인해 1초에 1000개 정도의 정보가 유실될 가능성이 있음
      • 실제로 메이플스토리의 경우, 네트워크를 Non-blocking의 Synchronous I/O로 구축

다음 주 까지의 assignment

  • '공룡책(Operating System Concepts)' Chapter.05 까지 학습해오기
  • 2주에 걸쳐 운영체제 학습하는 시간 가질 것임!


+ Recent posts