Study/TIL(Today I Learned)

24.06.28 CS

에린_1 2024. 6. 28. 16:21
728x90

CS

운영체제(OS, Operationg System)

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

운영체제의 역할

  1. 프로세스 관리
    • 프로세스, 스레드
    • 스케줄링
    • 동기화
    • IPC 통신
  2. 저장장치 관리
    • 메모리 관리
    • 가상 메모리
    • 파일 시스템
  3. 네트워킹
    • TCP/IP
    • 기타 프로토콜
  4. 사용자 관리
    • 계정 관리
    • 접근권한 관리
  5. 디바이스 드라이버
    • 순차접근 장치
    • 임의접근 장치
    • 네트워크 장치

1. 프로세스 관리

  • 운영체제에서 작동하는 응용 프로그램을 관리하는 기능이다.
  • 현재 CPU를 점유해야 할 프로세스를 결정하고, 실제로 CPU를 프로세스에 할당하며, 이 프로세스 간 공유 자원 접근과 통신 등을 관리하게 된다.

2. 저장장치 관리

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

3. 네트워킹

  • TCP/IP 기반의 인터넷에 연결하거나, 응용 프로그램이 네트워크를 사용하려면 운영체제에서 네트워크 프로토콜을 지원해야 한다. 현재 상용 OS들은 다양하고 많은 네트워크 프로토콜을 지원한다.
  • 운영체제는 사용자와 컴퓨터 하드웨어 사이에 위치해서, 하드웨어를 운영 및 관리하고 명령어를 제어하여 응용 프로그램 및 하드웨어를 소프트웨어적으로 제어 및 관리를 해야한다.

4. 사용자 관리

  • 운영체제는 한 컴퓨터를 여러 사람이 사용하는 환경도 지원해야 한다.
  • 각 계정을 관리할 수 있는 기능이 필요하다. 사용자 별로 프라이버시와 보안을 위한 개인 파일에 대해선 다른 사용자가 접근할 수 없도록 하애 한다. 이 밖에도 파일이나 시스템 자원에 접근 권한을 지정할 수 있도록 지원하는 것이 사용자 관리 기능이다.

5. 디바이스 드라이버

  • 운영체제는 시스템의 자원, 하드웨어를 관리한다. 시스템에는 여러 하드웨어가 붙어 있는데, 이들을 운영체제에서 인식하고 관리하게 만들어 응용 프로그램이 하드웨어를 사용할 수 있게 만들어야 한다.
  • 운영체제 안에 하드웨어를 추상화 해주는 계층이 필요한데, 이 계층이 바로 디바이스 드라이버라고 불린다. 하드웨어 종류가 많은 만큼, 운영체제 내부의 디바이스 드라이버도 많이 존재한다.

프로세스 & 스레드

  • 프로세스 : 프로그램을 메모리 상에서 실행중인 작업
  • 스레드 : 프로세스 안에서 실행되는 여러 흐름의 단위
  • 기본적으로 프로세스마다 최소 1개의 스레드를 소유하고 있다.(메인 스레드 포함)

주소 공간

  • 프로세스는 각각 별도의 주소공간을 할당한다.(독립적)
    • Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)
    • Data : 전역변수, 정적변수, 배열 등
      • 초기화 된 데이터는 data 영역에 저장된다.
      • 초기화 되지 않은 데이터는 bss 영역에 저장된다.
    • Heap : 동적 할당 시 사용한다.(new(), malloc() 등)
    • Stack : 지역변수, 매개변수, 리턴 값(임시 메모리 영역)
  • 스레드는 Stack만 따로 할당 받고 나머지 영역은 서로 공유한다.
  • 하나의 프로세스가 생성될 떄, 기본적으로 하나의 스레드가 같이 생성된다.
  • 프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용하는 차이가 존재한다.

멀티 프로세스

  • 하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것이다.
  • 장점
    • 안정성(메모리 침범 문제를 OS 차원에서 해결해준다.)
  • 단점
    • 각각 독립된 메모리 영역을 갖고 있어, 작업량이 많을 수록 오버헤드가 많이 발생한다. Context Switching으로 인한 성능 저하가 있다.

문맥교환(Context Switching)

  • 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정을 뜻한다.
  • 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 과정을 말한다.
  • 프로세스는 각 독립된 메모리 영역을 할당받아 사용하므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재한다.

멀티 스레드

  • 하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것을 말한다.
  • 스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해준다.
  • 장점
    • 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소한다.
    • 전역변수와 정적변수에 대한 자료 공유가 가능하다.
  • 단점
    • 안정성 문제가 있다. 하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불가 상태가 된다.(공유 메모리를 갖기 때문이다.)
  • 멀티 스레드의 안전성에 대한 단점은 Critical Section 기법을 통해 대비한다.
    • 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려고 할 때 발생하는 문제를 해결하기 위한 동기화 과정

프로세스의 주소 공간

  • 프로그램이 CPU에 의해 실행된다. = 프로세스가 생성되고 메모리에 프로세스 주소 공간이 할당된다.
  • 프로세스 주소 공간에는 코드, 데이터, 스택으로 이루어져 있다.
    • 코드 Segment : 프로그램 소스 코드 저장
    • 데이터 Segment : 전역 변수 저장
    • 스택 Segment : 함수, 지역 변수 저장
    • 최대한 데이터를 공유하여 메모리 사용량을 줄어야 한다.
    • Code는 같은 프로그램 자체에서는 모두 같은 내용이기 때문에 따로 관리하여 공유한다.
    • Stack과 Data를 나눈 이유는, 스택 구조의 특성과 전역 변수의 활용성을 위한 것이다.
  • 프로그램의 함수와 지역 변수는, LIFO(가장 나중에 들어간게 먼저 나온다.) 특성을 가진 스택에서 실행된다.
728x90

'Study > TIL(Today I Learned)' 카테고리의 다른 글

24.07.02 면접  (1) 2024.07.02
24.07.01 CS, 그래픽스  (0) 2024.07.01
24.06.27 CS  (0) 2024.06.27
24.06.26 CS  (0) 2024.06.26
24.06.25 알고리즘, CS  (0) 2024.06.25