Notice
Recent Posts
Recent Comments
Link
쟈미로그
운영체제, 커널, 메모리 구조에 대해 본문
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/
'CS > OS' 카테고리의 다른 글
뮤텍스와 세마포어 (0) | 2022.11.22 |
---|---|
임계영역, 경쟁상태(Race Condition)와 교착상태(DeadLock) (1) | 2022.11.22 |
프로세스와 스레드, 멀티 프로세스와 멀티 스레드 (0) | 2022.11.22 |
Comments