쟈미로그

운영체제, 커널, 메모리 구조에 대해 본문

CS/OS

운영체제, 커널, 메모리 구조에 대해

쟈미 2022. 11. 21. 23:57

1. 운영체제 (OS)

운영체제는 HW와 응용프로그램 사이에서 인터페이스 역할을 하는 시스템 소프트웨어다.

HW를 관리하고, 컴퓨터 시스템의 자원들을 효율적으로 관리하고, 사용자가 컴퓨터를 효과적으로 사용할 수 있도록 환경을 제공해준다.

 

2. 커널

커널메모리에 상주하는 운영체제의 핵심 부분이다.

어떤 응용프로그램이 컴퓨터 시스템에서 수행되려면 메모리에 올라가 있어야 한다. 마찬가지로 운영체제도 소프트웨어로서, 컴퓨터 전원이 켜짐과 동시에 메모리에 올라가야한다. 하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 메모리 낭비가 심해진다.

따라서 운영체제 중 항상 필요한 부분만 메모리에 올리게 되는데 그것이 커널이다!

카널은 운영체제의 핵심 역할인 컴퓨터 자원 관리 역할을 하지만, 사용자와의 상호작용은 지원하지 않는다.

따라서 사용자가 운영체제와 직접적인 상호작용을 하기 위해선 보통 셸(Shell)을 사용한다.

 

셸 Shell?
사용자-커널 사이에 인터페이스를 제공하는 프로그램

 

3. 프로세스 메모리 구조

코드 영역

  • 실행할 프로그램의 코드가 기계어 형태로 변환되어 저장되는 영역.
  • 컴파일 타임에 결정되고, 중간에 코드가 변경될 수 없도록 Read-Only 설정된다.

데이터 영역

  • 전역 변수, static 변수가 할당되는 영역.
  • 컴파일 타임에 할당돼서 프로그램이 종료돼야 소멸된다.

힙 영역

  • 프로그래머에 의해 동적으로 할당/해제되는 영역.
  • 런 타임에 크기가 결정된다.
  • Java에선 가비지 컬렉터가 관리하며 해제해준다.

스택 영역

  • 함수 호출 시 관련되는 데이터 (복귀할 주소, 지역변수, 매개변수, 리턴값 등)을 임시로 저장하는 영역.
  • 컴파일 시 크기가 결정된다.
  • 함수 호출 시 할당되고, 호출이 완료되면 소멸한다.
  • 메모리가 높은 주소 -> 낮은 주소 방향으로 할당된다.

 

스택과 힙

힙이 주소가 높은 방향으로 할당되는 반면, 스택은 주소가 낮은 방향으로 할당된다.

그래서 각 영역이 상대 공간을 침범하는 일이 생길 수도 있는데, 누가 침범하냐에 따라 Heap Overflow, Stack Overflow가 발생한다.

(재귀 함수 깊이가 깊어질 때 Stack Overflow 발생하는 이유)

 

 

참고
OS, 커널
https://minkwon4.tistory.com/295
https://backtony.github.io/interview/2021-12-13-interview-20/#%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0
https://goodmilktea.tistory.com/23
메모리 구조
https://zangzangs.tistory.com/107
https://jinshine.github.io/2018/05/17/%EC%BB%B4%ED%93%A8%ED%84%B0%20%EA%B8%B0%EC%B4%88/%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0/
Comments