운영 체제란?

hyeseungS·2023년 6월 14일
0

운영 체제(OS, Operating System)

사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 시스템 소프트웨어
하드웨어를 관리하고, 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 응용 프로그램과 하드웨어 간의 인터페이스로써 다른 응용 프로그램이 유용한 작업을 할 수 있도록 환경을 제공해줌.

ex) Windows, Linux, UNIX, MS-DOS 등

운영 체제의 역할

1. 프로세스 관리

운영체제에서 작동하는 응용 프로그램을 관리하는 기능

  • 프로세스
  • 스케줄링
  • 동기화
  • IPC 통신

프로세서(CPU)를 관리하는 것, 현재 CPU를 점유해야할 프로세스를 결정하고, 실제로 CPU를 프로세스에 할당하며, 이 프로세스 간 공유 자원 접근과 통신 등을 관리.

2. 저장장치 관리

1차 저장장치에 해당하는 메인 메모리와 2차 저장장치에 해당하는 하드디스트, NAND 등을 관리하는 기능

  • 메모리 관리
  • 가상 메모리
  • 파일 시스템
  • 1차 저장장치 (Main Memory)
    • 프로세스에 할당하는 메모리 영역의 할당과 해제
    • 각 메모리 영역 간의 침범 방지
    • 메인 메모리의 효율적 활용을 위한 가상 메모리 기능
  • 2차 저장장치(HDD, NAND Flash Memory)
    • 파일 형식의 데이터 저장
    • 파일 데이터 관리를 위한 파일 시스템을 OS에서 관리
    • FAT, NTFS, EXT2, JFS, XFS 등 많은 파일 시스템들이 개발되어 사용 중

3. 네트워킹

TCP/IP 기반의 인터넷에 연결하거나, 응용 프로그램이 네트워크를 사용하려면 운영체제에서 네트워크 프토콜을 지원해야함.
현재 상용 OS들은 다양하고 많은 네트워크 프로토콜을 지원.

  • TCP/IP
  • 기타 프로토콜

4. 사용자 관리

운영체제는 한 컴퓨터를 여러 사람이 사용하는 환경 지원해야함. 따라서, 운영체제는 각 계정을 관리할 수 있는 기능이 필요.

  • 계정 관리
  • 접근 권한 관리

사용자 별로 프라이버시와 보안을 위해 개인 파일에 대해선 다른 사용자가 접근할 수 없도록 해야함, 파일이나 시스템 자원에 접근권한을 지정할 수 있도록 지원해야함.

5. 디바이스 드라이버

운영체제 안에 하드웨어를 추상화하는 계층
운영체제는 시스템의 자원, 하드웨어를 관리함. 시스템에는 여러 하드웨어가 붙어 있는데, 이들을 운영체제에서 인식하고 관리하게 만들어 응용 프로그램이 하드웨어를 사용할 수 있게 해야함.

  • 순차접근 장치
  • 임의접근 장치
  • 네트워크 장치

하드웨어의 종류가 많은 만큼, 운영체제 내부의 디바이스도 많이 존재

프로세스와 스레드

  • 프로세스 : 프로그램을 메모리 상에서 실행 중인 작업
  • 스레드 : 프로세스 안에서 실행되는 여러 흐름의 단위

기본적으로 프로세스마다 최소 1개의 스레드 소유(메인 스레드 포함)

프로세스는 각각 별도의 주소공간에 할당 (독립적)

  • Code : 코드 자체를 구성하는 메모리 영역 (프로그램 명령)
  • Data : 전역변수, 정적변수, 배열 등
    • 초기화 된 데이터는 data 영역에 저장
    • 초기화 되지 않은 데이터는 BSS(Block Stated Symbol) 영역에 저장
  • Heap : 동적 할당 시 사용 (new(), malloc() 등)
  • Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)

스레드는 Stack만 따로 할당 받고 나머지 영역은 서로 공유

하나의 프로세스가 생성될 때, 기본적으로 하나의 스레드 같이 생성

프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용하는 차이

멀티 프로세스

하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것

  • 장점 : 안전성 (메모리 침범 문제를 OS 차원에서 해결)
  • 단점 : 각각 독립된 메모리 영역을 갖고 있어, 작업량이 많을 수록 오버헤드 발생. Context Switching 으로 인한 성능 저하

Context Switching

프로세스의 상태 정보를 저장하고 복원하는 일련의 과정
동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정

-> 프로세스는 각 독립된 메모리 영역을 할당받아 사용되므로, 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재함

멀티 스레드

하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것

스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해줌

  • 장점 : 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소. 전역 변수와 정적 변수에 대한 자료 공유 가능
  • 단점 : 안정성 문제. 하나의 스레드가 데이터 공간 망가뜨리면, 모든 스레드가 작동 불능 상태 (공유 메모리를 가져서)
    • Critical Section 기법을 통해 대비
      : 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려할 때 발생하는 문제를 해결하기 위한 동기화 과정
      상호 배제, 진행, 한정된 대기를 충족해야함

프로세스의 주소 공간

프로그램이 CPU에 의해 실행됨 -> 프로세스 생성, 메모리에 프로세스 주소 공간 할당됨

구성 요소

  • 코드 Segment : 프로그램 소스 코드 저장
  • 데이터 Segment : 전역 변수 저장
  • 스택 Segment : 함수, 지역 변수 저장

최대한 데이터를 공유하여 메모리 사용량을 줄여야 함.
Code는 같은 프로그램 자체에서는 모두 같은 내용이기 때문에 따로 관리하여 공유
StacK & Data는, 스택 구조의 특성과 전역 변수의 활용성을 위해 나눔

프로그램의 함수와 지역 변수는, LIFO 특성을 가진 Stack에서 실행
따라서, 이 함수들 안에서 공통으로 사용하는 '전역 변수'는 따로 지정해주면 메모리 아낄 수 있음.

인터럽트 (Interrupt)

프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것

지금 수행 중인 보다 더 중요한 일이 발생하면 그일을 먼저 처리하고 나서 하던 일을 계속해야함.

  • 외부/내부 인터럽트 : CPU의 하드웨어 신호에 의해 발생
    • 외부 인터럽트 : 입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생
      • 전원 이상, 기계 착오, 외부 신호, 입출력
    • 내부 인터럽트 : Trap이라고 부르며, 잘못된 명령이나 데이터 사용할 때 발 생
      • 0으로 나누기, 오버플로우, 명령어 잘못 입력(Exception)
  • 소프트웨어 인터럽트 : 명령어 수행에 의해 발생
    • 프로그램 처리 중 명령의 요청에 의해 발생한 것 (SVC 인터럽트)
    • 사용자가 프로그램을 실행할 때 발생. 소프트웨어 이용 중에 다른 프로세스를 실행시키면 시분할 처리를 위해 자원 할당 동적이 수행됨.

인터럽트 발생 처리 과정

주 프로그램이 실행되다가 인터럽트가 발생했다.

현재 수행 중인 프로그램을 멈추고, 상태 레지스터와 PC 등을 스택에 잠시 저장한 뒤에 인터럽트 서비스 루틴으로 간다.

만약 인터럽트 기능이 없었다면, 컨트롤러는 특정한 어떤 일을 할 시기를 알기 위해 계속 체크를 해야 한다. (이를 폴링(Polling)이라고 한다)

폴링을 하는 시간에는 원래 하던 일에 집중할 수가 없게 되어 많은 기능을 제대로 수행하지 못하는 단점이 있었다.

즉, 컨트롤러가 입력을 받아들이는 방법(우선순위 판별방법)에는 두가지가 있다.

  • 폴링 방식

    사용자가 명령어를 사용해 입력 핀의 값을 계속 읽어 변화를 알아내는 방식

인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾아 이에 맞는 인터럽트 서비스 루틴을 수행한다. (하드웨어에 비해 속도 느림)

  • 인터럽트 방식

    마이크로컨트롤러(MCU) 자체가 하드웨적으로 변화를 체크하여 변화 시에만 일정한 동작을 하는 방식

    • Daisy Chain (직렬 우선순위 부여 방식) : 인터럽트가 발생하는 모든 장치를 한 개의 회선에 직렬로 연결하며 우선순위가 높은 장치를 맨 앞에 위치시켜서 우선 순위에 따라 연결한다.
    • 병렬 우선순위 부여 : 각 장치마다 별개의 회선으로 연결한다.

인터럽트 방식은 하드웨어로 지원을 받아야 하는 제약이 있지만, 폴링에 비해 신속하게 대응하는 것이 가능하다. 따라서 실시간 대응이 필요할 때는 필수적인 기능이다.

즉, 인터럽트는 발생시기를 예측하기 힘든 경우에 컨트롤러가 가장 빠르게 대응할 수 있는 방법이다.

profile
Studying!!

0개의 댓글