[OS] 운영체제 정리 - part1

이상돈·2023년 6월 10일
0
post-thumbnail

📌 운영체제 정리

운영체제(Operating System)란?

• 컴퓨터의 하드웨어를 manage하는 소프트웨어이다.
• 컴퓨터 유저와 컴퓨터 하드웨어간의 매개 역할을 수행한다.

Interrupts

• CPU와 I/O devices 사이에 통신하는 방법 중의 하나가 바로 interrupts이다.
• 인터럽트는 하드웨어에 의해 언제든 유발될 수 있다.

Trap vs Interrupt
인터럽트 : 이벤트 발생을 CPU에게 알리는 것, 하드웨어와 소프트웨어에 의해 발생할 수 있다.
트랩: 소프트웨어에 의해 발생하는 인터럽트이다.
하드웨어는 System bus를 통해 CPU에 신호를 보냄으로써 인터럽트를 발생
소프트웨어는 System call이라는 특별한 명령으로 인터럽트를 발생

시스템 콜(System call)

시스템 콜은 유저 프로세스에서 운영체제 서비스를 필요로 할 때 이를 받기 위해 사용하는 호출이다.

프로세스(Process)

프로세스는 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 말한다.

프로세스 제어 블록(Process Control Block, PCB)

PCB는 특정 프로세스에 대한 중요한 정보를 저장 하고 있는 운영체제의 자료구조이다. 운영체제는 프로세스를 관리하기 위하여, 프로세스의 생성과 동시에 고유한 PCB를 생성한다. 프로세스는 CPU를 할당받아 작업을 하던 도중, 프로세스 전환이 발생하면, 진행하던 작업을 저장하고 CPU를 반납해야하는데, 이때 작업의 진행상황을 모두 PCB에 저장한다. 그런 다음 다시 CPU를 할당 받으면, PCB에 저장되어있던 내용을 불러와 이전에 종료됐던 시점부터 다시 작업을 수행한다.

PCB에 저장되는 정보

• 프로세스 식별자 (PID) : 프로세스 식별정보
• 프로세스의 상태 : new, ready, waiting, terminated 등의 상태를 저장
• 프로그램 카운터 : 프로세스가 다음에 실행할 명령어 주소
• CPU 레지스터
• CPU 스케쥴링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
• 메모리 관리 정보 : 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함
• 입출력 상태 정보
• 어카운팅 정보

쓰레드란(Thread)

쓰레드는 프로세스의 실행 단위라고 할 수 있다. 한 프로세스 내에서 동작되는 여러 실행흐름으로 프로세스 내의 주소공간이나 자원을 공유할 수 있다.

• 하나의 프로세스안에서 각각의 쓰레드는 별도의 레지스터와 스택을 가지고있고, 나머지 code, data, heap은 공유한다.
• 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.

멀티프로세스 대신에 멀티쓰레드를 쓰는 이유

  1. 자원의 효율성 증대
    멀티프로세스를 사용하는대신 멀티쓰레드를 사용하면, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.

    프로세스 간의 Context Switching시 단순히 CPU 레지스터 교체 뿐만 아니라 RAM과 CPU 사이의 캐시 메모리에 대한 데이터까지 초기화되므로 오버헤드가 크기 때문

  2. 처리 비용 감소 및 응답 시간 단축
    프로세스 간의 통신(IPC)보다 스레드 간의 통신의 비용이 적으므로 작업들 간의 통신의 부담이 줄어든다.

    스레드는 Stack 영역을 제외한 모든 메모리를 공유하기 때문이다.

    프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다.

    Context Switching시 스레드는 Stack 영역만 처리하기 때문이다.

멀티쓰레드의 주의점

멀티프로세스는 자원을 공유하지 않기 때문에, 각각의 다른 프로세스가 동시에 같은 자원을 사용할 수 없다. 하지만, 멀티쓰레드는 여러 쓰레드가 동시에 필요로하는 자원에 접근할 수 있기 때문에, 이 부분을 신경써야 한다.
그렇기 때문에 멀티쓰레딩 환경에서는 동기화 작업이 필요하다. 동기화를 통해 작업 처리 순서를 컨트롤 하고 공유 자원에 대한 접근을 컨트롤 하는 것이다. 하지만 이로 인해 병목현상이 발생하여 성능이 저하될 가능성이 높다. 그러므로 과도한 락으로 인한 병목현상을 줄여야 한다.

뮤텍스와 세마포어

• 둘 다 병행 처리를 위한 프로세스 동기화 기법이다. (여러 프로세스나 쓰레드가 공유 자원에 접근하는 것을 제어하기 위한 방법)
• 세마포어는 공유 자원에 세마포어의 변수만큼의 프로세스(or 쓰레드)에 접근할 수 있다. 반면에 뮤텍스는 오직 1개만의 프로세스(or 쓰레드)만 접근할 수 있다.
v 현재 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있다. 하지만 뮤텍스는 락(lock)을 획득한 프로세스가 반드시 그 락을 해제해야 한다.

참고 및 이미지출처
https://rebro.kr/174
https://github.com/WeareSoft/tech-interview/blob/master/contents/os.md
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://jungeun960.tistory.com/118
profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글