운영체제

🪐 C:on·2021년 9월 20일
0

computer science

목록 보기
1/6

운영체제가 무엇인가요?

운영체제는 컴퓨터 시스템 자원들을 효율적으로 관리하여 사용자의 편의성과 시스템 성능을 극대화하는 시스템 소프트웨어입니다.

인터페이스는 GUI(입출력을 그래픽으로 표시하는 것), 마우스, 키보드 등으로 이루어집니다.

운영체제를 이루는 쉘과 커널이 무엇인가요?

  • 쉘 : 명령어를 해석하는 곳입니다. 사용자가 요청하는 것을 시스템이 알아듣게 해석을 한 뒤 전달하는 인터페이스입니다. sh, bash 등이 있습니다.
  • 커널 : 쉘에게 받은 요청을 하드웨어에 나누어 처리를 요구합니다. 다음의 작업을 수행합니다.
    • 프로세스관리 : 프로세스에 CPU를 분배
    • 메모리관리 : 프로세스에 작업공간을 배치
    • 파일시스템관리 : 데이터를 저장하고 접근할 수 있는 인터페이스 제공
    • 입출력관리
    • 프로세스간 통신 관리 : 공동 작업을 위한 프로세스간 대화를 가능케 함

프로세스는 뭐죠? 그와 밀접한 쓰레드와 차이는?

프로세스는 운영체제가 분배하고 자원을 할당한 작업 단위입니다.

프로그램을 실행하면 운영체제는 프로그램파일을 메모리에 넣게 되는데 이 메모리의 공간을 할당받아 실행되고 있는 프로그램을 프로세스라고 합니다.

이때 메모리 영역을 4가지형식으로 할당받습니다.

  • 코드
  • 데이터 : 전역변수 저장
  • 스택 : 지역변수, 매개변수, return주소 등
  • 힙 : 프로세스 실행 중 동적으로 할당되는 값들

아까 말했 듯 프로세스는 커널이 제공하는 통신(IPC)을 사용해야 다른 프로세스의 자원에 접근할 수 있습니다.

쓰레드는 프로세스의 작업들을 실행 흐름에 따라 분리한 것입니다.

따라서 프로세스는 무조건 하나의 쓰레드를 가지고 있으며 최소한 가져야 하는 쓰레드 1개를 메인쓰레드라고 합니다.

쓰레드는 프로세스의 스택을 할당받고 나머지는 공유해서 사용합니다.

스택은 앞에서 봤듯 함수에 사용되는 코드들을 담고 있기 때문에 쓰레드의 독립적인 실행에는 할당받은 함수 자원 외에는 필요치않습니다. 이를 통해서 통신비용을 줄이고 자원을 효율적으로 관리할 수 있게 됩니다.

프로세스, 쓰레드를 멀티로 사용한다는 것은 뭐죠?

멀티프로세스는 여러개의 cpu가 여러개의 작업을 동시에 처리하는 것입니다.

  • 프로세스 중 하나에 문제가 생겨도 다른 프로세스에는 영향을 주지 않습니다.
  • context switching이 발생하면 cpu레지스터와 캐시를 리셋해야 해서 오버헤드가 매우 큽니다.
    • context swithching은 뒤에 자세히 나오지만 간단하게는 cpu가 다루는 작업의 순서 정보를 교체하는 과정입니다.

멀티스레드는 하나의 프로세스에 여러개의 스레드로 자원을 공유하며 작업을 나누어 수행하는 것입니다.

  • context switching이 발생했을 때 stack영역만 처리하므로 오버헤드가 적어집니다.
  • 필요한 메모리영역도 적어서 자원소모가 감소합니다.
  • 쓰레드 중 하나에 문제가 생기면 그것을 담고있는 프로세스 자체에 영향을 줍니다.
  • 자원을 공유하므로 동기화문제가 발생할 수 있습니다.

인터럽트에 대해 설명해주세요.

인터럽트는 입출력장치나 예외상황의 이벤트가 발생했을 때 프로그램을 멈추고 상황을 처리하는 명령입니다.

인터럽트에는 어떤 것들이 있죠?

  • 하드웨어 인터럽트는 입출력장치, 타이머장치 등 외부적인 요인으로 발생합니다.
  • 소프트웨어 인터럽트는 소프트웨어가 OS서비스를 요청하거나 에러를 일으켰을 대 발생합니다. 파일 읽기와 쓰기, 오버플러우 등이 있습니다.

인터럽트 처리과정을 설명해주세요

인터럽트 발생

⇒ cpu는 실행하던 명령을 마치면 인터럽트 라인을 통해 인터럽트를 감지

⇒ 인터럽트벡터테이블을 읽어서 인터럽트처리루틴(ISR)으로 이동

⇒ 인터럽트를 처리하는 동안은 인터럽트를 금지시킴

⇒ 현재까지 수행한 상태를 PCB에 저장하고 PC에 다음 명령 주소를 저장

⇒ 인터럽트를 처리

⇒ 대피시킨 프로세서의 상태를 복원

⇒ 인터럽트 해제

⇒ PC값을 복원하여 이전 실행위치로 복귀

인터럽트가 왜 필요하나요?

프로세스가 입력장치를 주기적으로 검사하며 신호를 기다리면 그때마다 프로세스는 작업을 멈춰야 하므로 오버헤드가 증가하고 시간이 낭비됩니다.

0개의 댓글