CS

운영체제

index.ys 2023. 6. 12. 01:28

운영체제 (OS)의 역할

  • 프로그램에 필요한 자원을 할당하고 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램, 운영체재도 결국은 프로그램이지만 특별한 프로그램이다. 자원에는 cpu , 메모리, 보조기억장치, 입출력장치 등이 포함된다.
  • 운영체제 또한 프로그램이기 때문에 메모리에 적재되어야 한다. 운영체제는 매우 특별한 프로그램이기 때문에 메모리에 적재되어 실행됨 이때 커널영역이라는 메모리의 공간에 적재되어 실행됨, 그리고 응용프로그램( 카카오톡, 메모장, 웹브라우저, 게임 등)이 적재되는 공간을 사용자영역이라고 하는데 운영체제를 제외한 모든 응용프로그램들은 사용자 영역에 적재되어 실행됨
  • 운영체제는 사용할 프로그램을 메모리(사용자 영역)에 적재하고, 더 이상 실행되지 않은 프로그램을 메모리에서 삭제하여 자원을 관리하는 역할을 수행함
  • 어떤 프로그램이 얼마 동안 cpu를 사용하게 할지 cpu의 스케쥴링 또한 운영체제가 관리하고 수행함 응용 프로그램과 하드웨어 사이에서 응용 프로그램에 필요한 자원을 할당하고 응용 프로그램이 올바르게 실행되도록 관리함

커널

  • 운영체제의 핵심 서비스를 당담하는 부분을 커널 이라고 함 사람의 심장, 자동차의 엔진
  • 사용자 인터페이스는 커널에 포함되지 않음

이중모드

  • 커널은 사용자가 실행하는 응용프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호함, 응용 프로그램이 cpu , 메모리등에 직접 접근하여 자원을 마음대로 조작한다면 자원이 무질서하게 관리됨 자원의 접근을 대행함
  • cpu가 명령어를 실행하는 모드를 사용자모드, 커널모드로 구분하는 방식 응용 프로그램은 기본적으로 사용자모드로 실행되기 때문에 자원에 직접 접근하지 못하고 커널을 통해 접근해야함
  • 커널 모드는 운영체제 서비스를 제공받을 수 있는 실행모드

시스템 호출

  • 운영체제 서비스를 제공받기 위한 요청, 사용자 모드에서 커널모드로 전환하는 방법

운영체제 핵심 서비스

  • 프로세스 관리, 자원 접근 및 할당, 파일 시스템관리

프로세스 관리

  • 메모리에 적재되어 실행중인 프로그램을 프로세스라고 한다.
  • 하나의 cpu는 한번에 하나의 프로세스만 실행 할 수 있기 때문에 cpu는 실행중인 모든 프로세스들을 사람이 인지할 수 없는 속도로 빠르게 번갈아 가면서 프로세스를 실행함 이때 실행중인 프로세스에서 다른 프로세스로 전환되는 것을 context switching( 문맥 교환 )이라고 함

자원 접근 및 할당

  • 메모리에는 여러개의 프로세스가 적재되고 cpu는 한번에 하나의 프로세스만 실행이 가능함.
  • cpu가 어떤 프로세스가 얼마나 오랫동안 cpu를 점유할지 판단하는 것은 운영체제가 수행함
  • 운영체제는 새로운 프로세스가 메모리에 적재될 때 마다 어느 메모리 주소에 적재되야 햘지 결정함
  • 인터럽트 서비스 루틴을 제공함으로써 입출력 작업을 수행함

파일 시스템 관리

  • 파일을 CRUD하는 것도 운영체제의 역할

운영체제 요약

  • 운영체제의 핵심 서비스를 제공하는 부분을 커널이라고함
  • 커널은 컴퓨터 실행시 메모리에 적재되는데 이때 메모리의 적재 공간은 커널영역과 , 사용자 영역으로 나뉨
  • 사용자 프로세스가 커널의 서비스를 제공받기 위해서는 사용자 모드에서 커널모드로 전환해야함 이는 시스템 호출을 통해 이루어짐
  • 커널의 대표적인 서비스 세가지는 프로세스 관리, 자원 접근 및 할당, 파일 시스템 관리로 나뉨

프로세스

  • 현재 실행중인 프로그램을 프로세스라고 표현함 ex) 카카오톡, 브라우저 ,메모장, 엑셀, 포토샵 등
  • 프로그램은 실행되기 전에는 ssd,hdd에 적재되어 있는 데이터 덩어리임
  • 적재되어 있는 데이터 덩어리를 메모리에 적재하고 실행하는 순간 프로세스가됨 프로세스 생성
  • 사용자가 보는 앞에서 실행되는 프로세스 ( 작업관리자로 확인가능 ) 포그라운드 프로세스
  • 뒤에서 실행되는 프로세스 백그라운드 프로세스
  • 상호작용 하지 않고 혼자서 실행되는 프로세스 => 서비스 , 데몬

프로세스 제어 블록

  • 프로세스들은 차례대로 돌아가면서 한정된 시간만큼 cpu를 이용함, 한정된 시간 동안 자신의 차례만큼 cpu를 이용하고 한정된 시간이 끝나면 타이머 인터럽트가 발생하여 다음 프로세스로 넘어가고 다시 자기 차례를 기다림
  • 프로세스 제어 블록( PCB )는 프로세스와 관련된 정보를 저장하는 자료구조 EX) 상품에 달려있는 태그 => 상품에 달려있는 태그에 해당 제품을 식별하기 위한 정보를 나타냄
  • PCB는 커널영역에 생성됨 운영체제도 수많은 프로세스들 사이에서 PCB로 특정 프로세스를 식별, 해당 프로세스를 처리하는 데 필요한 정보 판단
  • PCB는 프로세스 생성시에 만들어지고 실행이 끝나면 폐기

프로세스 ID

  • 프로세스 ID는 특정 프로세스를 식별하기 위해 부여하는 고유한 번호 EX) 학번, 사번

레지스터 값

  • 프로세스는 context switching 발생이후 다시 자신의 cpu점유 차례가 돌아오면 이전가지 사용했던 레지스터의 중간 값들을 모두 복원함 => 그래야 다음 cpu점유시 작업을 이어서 그대로 실행 할 수 있음 PCB안에는 해당 프로세스가 실행하며 사용했던 프로그램 카운터( 메모리 주소 기억 )레지스터 값들이 담김

프로세스 상태

  • 프로세스의 상태가 어떤지 PCB에 기록

CPU 스케쥴링 정보

  • 프로세스가 언제, 어떤 순서로 CPU를 할당 받을지에 대한 정보 기록

메모리 관리 정보

  • 프로세스가 어느 (메모리)주소에 저장 되어있는지 대한 정보 기록, 베이스 레지스터, 한계 레지스터 값과 같은 정보 기록,메모리 주소를 알 수 있는정보 기록

사용한 파일과 입출력 장치 목록

  • 프로세스가 입출력장치나 파일을 사용하면 PCB에 기록됨

문맥교환 context switching

  • 하나의 프로세스에서 다른 프로세스로 실행 순서가 넘어갈때 발생, 문맥(context)은 PCB에 담겨있는 정보들
  • 하나의 프로세스 수행을 재개하기 위해 기억해야할 정보 => context context는 해당 프로세스의 PCB에 표현되어있음

프로세스의 메모리 영역

  • 프로세스가 생성되면 커널영역에 PCB생성 , 사용자 영역은 코드영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장

코드 영역 code segment

  • 텍스트 영역이라고도 부름
  • 실행할 수 있는 코드, 기계어로 이루어진 명령어 저장
  • 읽기 전용(read-only) 공간

데이터 영역 data segment

  • 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간 ex) 전역 변수
  • 프로그램이 실행되는 동안 유지, 프로그램 전체에서 사용할 수 있는 변수

* 코드 영역과 데이터 영역은 크기가 변하기 않음 => 프로그램을 구성하는 명령어들이 프로그램이 실행되는 동안 갑자기 바뀔일이 없음, 크기가 고정된 영역 => 정적 할당 영역이라고도함, 힙 영역과 스택 영역은 프로세스 실행과정에서 그 크기가 변할 수 있는 영역 => 동적 할당 영역

힙 영역 heap segment

  • 프로그래머가 직접 할당 할 수 있는 저장공간, 프로그래밍 과정에서 힙 영역에 메모리 공간을 할당했다면 언젠가는 다시 해당 공간을 반환해야함 => '해당 메모리 공간을 사용하지 않겠다'
  • 메모리 공간을 반환하지 않는다면 메모리 낭비발생 => 메모리 누수(memory leak)

스택 영역 stack segment

  • 데이터를 일시적으로 저장하는 공간
  • 잠깐 쓰다가 말 값들이 저장되는 공간 => 함수의 실행이 끝나면 사라지는 매개변수, 지역변수
  • 임시적으로 저장할 데이터는 스택영역에 push 더 이상 필요하지 않은 데이터는 pop
  • 힙 영역은 메모리의 낮은 주소에서 높은 주소로 할당되고, 스택 영역은 높은 주소에서 낮은 주소로 할당됨 => 새롭게 할당되는 주소가 겹칠일 없음