Skip to content

Latest commit

 

History

History
60 lines (48 loc) · 3.09 KB

File metadata and controls

60 lines (48 loc) · 3.09 KB

Operating System


Document Link


커널

  • 커널 오브젝트 : 운영체제가 전용으로 사용하는 영역 (윈도우 핸들 등). 유저가 임의로 생성할 수 없다.
    • 유저가 함수로 구현할 수 없는 강력한 기능들을 제공한다.

프로세스, 스레드

  • 스레드

    • 프로세스를 동작시키는 실행 흐름. 프로세스는 최소 하나의 스레드를 가지게 된다.
    • 같은 프로세스에서 동작하기 때문에 스레드끼리는 자원 공유가 가능하다.
    • 이 때문에, 스레드 간의 의존도를 줄이는 것이 좋은 스레드 설계 방법이다.
  • 스레드 스케쥴러

    • 스레드 실행 순서를 관리하는 것
    • 운영 체제가 가지고 있다. 절대 유저가 건드려서 안된다.
  • 컨텍스트 스위칭

    • 현재 실행되는 스레드를 다른 스레드로 변경하는 것
    • 다른 스레드가 사용하고 있는 자원을 현재 스레드에서 사용할 때 그 값을 보장해줄 수 없다. 컨텍스트 스위칭이 언제 일어날 지 모르기 때문.
    • 그래서 스레드 동기화를 하는 방법을 지원한다.
  • 스레드 동기화 : 스레드 내에서 내가 원하는 특정 부분(또는 스레드 전체)들을 동기화 처리하는 것

  • 스레드 동기화를 위한 유저 모드커널 모드가 있다.

    • 커널 모드 : 굉장히 강력한 기능들을 제공해주지만 유저 모드에 비해 느리다.
      • 뮤텍스, 세마포어, 이벤트 기법이 있다.
    • 유저 모드 : 커널 모드에 비해 빠르지만 기능이 좀 적다.
      • 크리티컬 섹션 이라는 기능을 제공한다.
      • 게임에서 주로 사용한다. 빨라서 (+ 이벤트 도 사용한다)
  • 데드락 : 실행 코드 내에서 언락을 하지 못해서 다른 스레드가 진행하지 못하는 현상

  • cpp 에서 사용할 때 _beginthreadex함수를 사용한다. beginthread는 문제가 있어서 사장된 함수

  • 프로세스 :

  • 멀티태스킹 : 운영체제가 여러 프로그램을 동시에 처리하는 기법

    • 옛날에는 CPU의 물리적 코어 개수가 1개라 엄밀히 말하면 동시에 실행하는 것이 아니라 잘게 쪼개서 동시에 실행되는 것처럼 보이게 함
    • 요새는 물리적 코어의 개수가 많기 때문에 말 그대로 병렬 처리동시 처리로 변경했다
    • 태스크 개수가 코어 수보다 많으면 남는 태스크를 잘게 쪼개서 처리한다. (병렬 + 동시)
  • 참고