ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Chapter 1. Introduce
    Operating System 2019. 6. 24. 22:53

    1. Operating System이란

    컴퓨터가 잘 동작하도록 도와주는 프로그램이다. OS는 프로세스에게 H/W 자원을 '분배'하고, 프로세스들 사이의 '충돌'을 관리한다. 이를 위해, 프로세스들은 반드시 OS가 가진 '규칙'을 지켜야한다. 예를 들어, 프로세스가 System Call의 파라미터 형식을 지키면 해당 기능을 보다 손 쉽게 사용할 수 있다.

    비유를 들어 설명해보자. 국가(OS)는 국민들에게(Process) 도로, 항공, 군대, 치안 등을(Resource) 제공함으로 국민들은 편리하게 그리고 충돌 없이 생활 할 수 있다. 하지만 국민들은 반드시 국가가 가진 법(규칙)을 준수해야한다.

    2. Operating System이 하는 일

    • Resource Scheduling
    • Process 관리
    • Memory 관리
    • I/O 관리
    • Deadlock, Memory Trap 등 에러 관리

    3. 비선점형과 선점형의 차이

    비 선점형

    한 프로세스가 제어권을 선점하고 있으면 스스로 제어권을 양보하지 않는 이상 다른 프로세스가 실행 할 수 없다. 선점형보다 스케줄러 호출 빈도수가 적어 Context Switching의 오버헤드가 적다. 하지만 응답성이 매우 낮아, 현대 OS에서는 거의 사용하지 않는다. 예를 들어, 어떤 작업 소요시간이 1분이면 다른 모든 프로세스들은 1분동안 대기하는 문제가 발생한다.

     

    선점형

    한 프로세스가 제어권을 선점하고 있어도, 다른 프로세스가 제어권을 '강제로' 점유할 수 있다. 비선점형보다 스케줄러 호출 빈도수가 많아 Context Switching의 오버헤드가 발생한다. 하지만 '응답성'이 빨라 현 OS는 선점형 방식을 사용하고 있다. 하지만 많은 프로세스들이 동시에 리소스에 접근할 수 있어, '동기화' 문제가 발생할 수 있다. 이때 동기화된 자료에 접근하는 동안 Interrupt가 불가능하므로 Critical Section 영역이 짧을수록 좋다.

    4. Blocking vs Non-Blocking

    Block 방식은 다른 주체의 작업이 끝날 때까지 '기다렸다가' 자신의 작업을 수행하는 것을 의미한다. 

    Non-Block 방식은 다른 주체의 작업에 상관없이 자신의 작업을 수행하는 것을 의미한다.

    회사 생활의 비유를 들어 설명해보자. Block방식은 상사에게 보고서를 제출하고, 상사가 해당 보고서를 검토 완료할때까지 옆에서 계속 '대기'하는것을 의미한다. Non-Block방식은 상사에게 보고서를 제출하고, 자기 자리로 와서 다른 업무를 처리하는 것을 의미한다.

     

    [그림 1] Non Block vs Block Example

    5. Sync vs Async

    youtube를 시청하던 중 소리와 영상속 이미지가 맞지 않으면 'Sync'가 안맞는다고 말한다. 이렇게 '순서'와 '결과'에 관점을 둔 방식을 sync, async 방식이다. Synchronous란 작업의 시작과 종료가 일치하게 동작하는 방식을 말한다. 반면 ASynchronous는 작업의 순서와 결과를 신경쓰지 않는다. 즉, 끝나는 동시에 작업을 시작하지 않을수도 있음을 의미한다.

    회사 생활의 비유를 들어 설명해보자. 상사에게 보고서를 제출하고, 기다리든 다른 작업을 하는것은 중요하지 않는다. 중요한 점은 상사로부터 결과 보고서를 받고 '바로 처리하는지', 혹은 '자신이 편할 때 처리'하는지에 차이점이 있다.

     

    1) Sync & Blocking

    작업을 요청하고 대기하고 있다, 결과를 반환하면 해당 업무를 바로 처리하는 형태이다. 예를 들어, 자바에서 입력 요청을 할 때 I/O 입력이 오기까지 대기 상태에 있다 입력 완료시 결과를 받아서 바로 처리한다.

    [그림2] Sync & Blocking

    2) Sync & Non-Blocking

    작업을 요청하고 자신의 할 일을 한다. 하지만 요청 작업이 완료됬는지를 확인하기 위해 수시로 물어보면 동기적으로 요청 작업의 결과물을 바로 처리한다. 예를 들어, 게임을 다운로드 할 때 얼마나 진행됬는지를 표시할 때 수시로 다운로드 양을 물어보며 표시한다.

    [그림 3] Sync & Non-Blocking

    3) Async & Blocking

    작업을 요청하고 대기하다, 자신이 원할 때 요청 결과를 처리한다. 이 경우는 개발자가 Non-Blocking & Async를 사용하다 실수로, 혹은 기타 이유로 적용될 때가 있다.

    [그림 4] Async & Blocking

    4) Async & Non-Blocking

    작업을 요청하고 자신의 할 일을 하다, 자신이 원할 때 요청 결과를 처리한다. 예를 들어, Android, Web 등에서 API 통신할때이다. API 요청을 한 후, 자신의 작업을 하다가 콜백을 통해서 추가적인 작업을 처리한다.

    [그림 5] Async & Non-Blocking

    6. Interrupt

    CPU에 마련된 특별한 핀에 시그널이 들어오면 CPU가 하던 작업을 중단하고 지정된 주소로 이동한다. 이동한 주소에서 작업을 수행하고 돌아오는 특별한 메커니즘을 수행한다. 부팅 시 인터럽트 벡터와 인터럽트 서비스 루틴 주소를 미리 설정한다.

    SW Interrupt : System Call, Divide 0과 같은 예외처리, 스케줄링이 일어날때 발생한다.

    HW Interrupt : I/O, 다른 HW와 정보를 교환 할때 사용한다.

     

    처리 과정

    1. CPU 특정 핀에 시그널 발생
    2. 진행 프로세스의 정보 Context를 커널스택에 푸시
    3. 인터럽트 벡터로 넘어가 인터럽트 서비스 루틴 실행
    4. 커널스택에 저장했던 것 pop
    5. 유저 모드로 전환 후 다음 명령 진행

    7. System Call

    운영체제는 User / Kernel 모드로 나누어 구동한다. 파일을 읽거나, 쓰거나, 화면에 메시지를 출력하는 등 많은 부분이 커널모드에서 동작한다. 반면 많은 어플리케이션은 사용자 모드에서 동작한다. 사용자 모드에서 시스템 콜을 호출하면 커널 영역의 기능을 사용할 수 있다. 시스템 콜 호출 시, User 모드의 Context를 커널 스택에 푸시하고 커널 모드의 기능을 수행한다. 이후 작업이 완료되면 스택에서 pop하여 이전 Context로 Switching한다.

     

    System Call 에서 메시지 전달 방법

    1. 파라미터를 레지스터에 넣어 전달한다. 당연히 파라미터의 갯수, 길이 제한이 있다.

    2. 매개변수는 메모리에 넣고 메모리의 주소를 레지스터에 넣어 전달한다. 메모리 접근이 있어 속도는 조금 느리지만 파라미터의 갯수나 길이에 제한이 없다.

    8. Cache Memory

    캐시는 속도가 빠른 장치(레지스터)와 느린 장치간의(메모리) 병목 현상을 줄이기 위한 메모리이다. 메모리에서 사용하던 일부 데이터를 캐시 메모리에 적재하고, 이후 해당 데이터를 메모리로 접근 하는 것이 아닌 캐시 메모리로 접근한다. 이때, 캐시의 성능은 CPU가 이후에 참조할 쓸모 있는 데이터가 얼마나 캐시에 있냐에 의존한다. 이때, 적중률을 높이기 위해 구역성 원리를 이용한다. 보통 프로그램은 모든 코드나 데이터를 균등하게 접근하지 않기 때문에 아래와 같은 방식을 활용한다.

    시간 구역성 : 최근에 참조한 주소의 내용은 곧 이어 다시 참조 될것 같다.

    공간 구석성 : 참조된 인접 주소의 근처 주소는 참조 될것 같다.

     

    + 캐시 메모리는 탐색이 잦기 때문에 HashMap을 활용하여 구현한다.

     

    ※ PC 부팅 시 프로그램 동작 순서

    [그림 6] PC 부팅 순서

     

    'Operating System' 카테고리의 다른 글

    Chapter 6. Main Memory  (0) 2019.08.14
    Chapter 5. Synchronization & Deadlocks  (0) 2019.08.14
    Chapter 4. Scheduling  (0) 2019.06.25
    Chapter 3. Thread  (0) 2019.06.24
    Chapter 2. Process  (0) 2019.06.24
Designed by Tistory.