일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 크래프톤정글
- 네트워크
- anonymous page
- 이벤트 함수 실행 순서
- 다익스트라
- c#
- Unity
- KRAFTON JUNGLE
- TiL
- 크래프톤 정글 4기
- User Stack
- 추상클래스와인터페이스
- 백준
- 티스토리챌린지
- 오블완
- 연결리스트
- 알고리즘
- project3
- kraftonjungle
- 알고리즘수업-너비우선탐색2
- 크래프톤정글4기
- 전쟁-전투
- 4기
- 유니티
- C
- BFS
- 파이썬
- 크래프톤 정글
- pintos
- 핀토스
- Today
- Total
말감로그
User Stack(사용자 스택) 본문
운영 체제의 관점에서 볼 때, User Stack (사용자 스택)은 매우 중요한 개념이다.
사용자 스택은 프로그램 실행 중 발생하는 다양한 작업들을 관리하기 위한 메모리 구조로, 프로세스의 실행 상태를 효과적으로 관리하는 데 필수적이다.
유저스택(User Stack)
사용자 모드에서 실행되는 프로세스나 스레드에 의해 사용되며, 함수 호출 시에 해당 함수의 매개변수, 지역 변수, 복귀 주소 등이 저장된다.
유저 스택은 프로세스의 사용자 모드 메모리에 위치하며, 해당 프로세스가 직접적으로 접근할 수 있다.
유저 스택은 각 프로세스마다 별도로 할당되며, 스택 프레임을 통해 함수 호출과 복귀를 관리한다.
- 함수 호출 관리 : 함수가 호출될 때마다 해당 함수에 필요한 정보를 스택에 저장하고, 함수가 종료되면 스택에서 해당 정보를 제거하여 함수 호출의 순서를 관리한다.
- 지역 변수 저장 : 함수 내에서 선언된 지역 변수들은 유저 스택에 저장된다. 함수 실행 도중에 이 변수들에 접근하여 값을읽거나 변경이 가능하다.
- 매개 변수 전달 : 함수 호출 시 전달된 매개변수들은 스택에 저장되어 함수가 이를 활용한다.
- 복귀 주소 전달 : 함수 호출 시 이전에 실행되던 위치(복귀 주소)를 저장하여 함수가 종료되면 해당 위치로 복귀할 수 있도록 한다.
* OFF-Limit 영역 : 보안을 위해 할당되지 않은 메모리 영역. (아무런 데이터도 들어있지 않음)
* Null Pointer 할당 영역 : 프로그램이 동적으로 메모리를 할당할 때 사용되는 영역. Null 포인터를 가리키는 Null 포인터를 역참조하거나 Null 포인터가 포인팅하는 메모리 영역에 접근하려고 하면 segmentation fault
스택 관리 레지스터
rsp - 스택의 최상위에 있는 데이터의 위치를 가리키는 포인터 역할
스택의 가장 최근 데이터 위치를 가리키고, LIFO 방식이다보니 새로운 데이터가 스택에 푸시될 때마다 rsp는 감소하고, 마찬가지로 데이터가 팝될 때마다 rsp는 증가한다.
rbp - 현재 스택 프레임의 시작 위치를 가리키며 , 스택 프레임의 끝은 rsp가 가리키는 위치이다.
스텍 프레임은 함수 호출 시 생성되며 함수의 로컬 변수 및 기타 정보를 보관하는 데 사용된다. 함수가 호출될 때마다 새로운 스택 프레임이 생성되며, 스택 프레임의 시작 위치를 가리키고 함수 내부에서 지역 변수에 접근하는 데 사용된다.
rbp를 기준으로 상대적인 오프셋을 사용하여 로컬 변수에 접근할 수 있다.
ret는 함수 호출을 끝내고 호출한 곳으로 돌아가는 명령어이다.
함수 호출의 호출 스택 프레임을 해제하고 이전 호출 스택 프레임으로 복귀하는 데 사용된다. ret 명령어는 호출된 함수에서의 처리를 완료하고 호출자에게 제어를 반환하는 데 중요한 역할을 한다.
커널 스택(Kernel Stack)
운영체제의 커널이나 커널 모드에서 실행되는 코드에 의해 사용되는 스택으로 주로 인터럽트 처리, 시스템 호출 및 커널 내부 함수 호출과 같은 운영체제의 핵심 기능을 수행하는 데 사용된다.
일반적으로 사용자 프로세스의 스택과는 별개로 관리된다.
커널 스택은 커널이 실행되는 동안 필요한 로컬 변수, 함수 호출 및 중간 결과를 저장하는 데 사용된다.
커널 모드는 일반적으로 매우 빠르게 실행되어야 하므로 (다수의 프로세스 및 하드웨어 이벤트에 대한 효율적인 처리와 시스템의 반응성을 보장하기 위함 -> 시스템 호출 . 인터럽트 처리, 스케줄링 및 동기화 등등 신속하게 처리해야함 )
커널 스택은 일반적으로 사용자 스택보다 훨씬 작고 제한된 크기를 가진다.
또한 커널 스택은 운영체제가 직접적으로 관리하기 때문에 사용자가 엑세스할 수 없다.
일반적으로 커널 스택은 각 프로세스 또는 스레드 마다 별도로 할당되며, 스레드 또는 프로세스가 커널 모드로 전환될 때마다 해당 스택이 사용된다.
일반적인 프로세스는 User Mode 스택과 Kernel Mode 스택을 각각 하나씩 가지고 있다.
user mode->kernel mode의 전환은 시스템 호출이나 인터럽트가 발생하면 일어난다.
즉, rsp 레지스터는 프로세스가 user mode이면 user mode의 스택의 top을 가리키다가 kernel 모드로 전환이 되면 kernel 모드의 스택의 top을 가리킨다.
참조
유저 스택과 커널 스택
출처: https://kldp.org/node/73308 커널 스택이 궁금합니다. | KLDP 리눅스 커널 스택에 대해서 궁금합니다. 1.커널 스택은 프로세스마다 하나씩 생성되는 건가요 ? 2.커널 스택에는 어떤 정보가 들어가게
kspsd.tistory.com
스택 구조
지금까지 배운걸 간단히 정리하면 다음과 같다
jeongzero.oopy.io
'이론 > 운영체제' 카테고리의 다른 글
Anonymous page (0) | 2024.03.23 |
---|---|
Lazy loading (0) | 2024.03.23 |
32 bit OS vs 64 bit OS (0) | 2024.03.11 |
프로세스와 스레드/세마포어와 뮤텍스/CPU 스케줄링 알고리즘/경쟁조건(Race condition)/데드락/문맥교환 (2) | 2024.03.05 |
CPU 스케줄링 알고리즘(FCFS, SJF, Priority Queue, Round Robin, SRTF, MLQ, MLFQ), 4BSD,nice (3) | 2024.02.29 |