Q1. Swapping과 Context Switching (CS)의 차이점에 대해 설명해주세요.
프로세스/스레드를 동시에 실행시키기 위해 필요할 수 있는 작업들
실행중인 프로세스/스레드를 관리해주는것이 CS이고 프로세스/스레드들의 메모리를 관리해주는 것이 Swapping임
Swapping은 CS를 위해 프로세스들의 메모리 관리를 해주는 작업
듀얼 프로세스인 경우, A 프로세스 -> B 프로세스로 CS를 위해 A 프로세스의 Context를 메모리에서 보조 기억장치 (주로 하드디스크)로 옮겨둔 다음, 새로 실행되는 B 프로세스의 Context 를 보조기억장치에서 메모리로 옮기는 작업인 Swapping이 진행됨
Context Switching은 프로세스/스레드를 동시에 실행시키기 위해서 CPU/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체하는 작업
※ 프로세스/스레드를 동시에 실행시키위해서는 Swapping과 CS가 반드시 일어나야하나?
CS는 반드시 일어나야함 하지만 메모리 상황이 넉넉하다면 Swapping은 아닐 수도 있음
CPU/코어에서 실행중인 프로세스/스레드를 교체할 때, 이전에 사용되던 RAM을 비워야 다음 프로세스/스레드가 이를 사용할 수 있음 (그렇다고 전부 비우는건 아님, 캐시 메모리는 안비움)
만약 메모리가 엄청 크다면? 이전 프로세스/스레드가 사용한 데이터를 안지워도 됨
- 참고한 사이트
https://3dmpengines.tistory.com/1662
Q2. 메모리의 Stack 영역에서 stack 자료구조를 사용하는 이유에 대해 설명해주세요.
Stack의 LIFO 후입선출이라는 특징을 바탕으로 함수 간의 데이터 전달과 복귀 주소 관리를 간편하게 할 수 있기 때문
프로세스나 스레드나 메모리에서 stack 영역은 공유하지 않고 개별적으로 할당된 고유한 영역임
여러줄의 프로그램의 명령어들 실행하다 보면 많은 메소드들을 참조해서 실행하는데 이때
호출한 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 stack에 저장하면 편리함
Q2 참고
https://st-lab.tistory.com/198
메모리 구조 [Memory Structure]
안녕하세요. 오늘은 제목에서 밝혔듯 메모리 구조에 대해 알아보려 합니다. 흔히 메모리라고 하면 RAM을 지칭하는데요, 보통 컴퓨터 구조에 대해 학습하시거나 배우셨던 분들은 알겠지만 메모리
st-lab.tistory.com
Q3. 자바 어플리케이션이 실행 될 때, 메모리가 어떻게 사용되는지 설명해주세요
- 자바 어플리케이션은 JVM위에서 동작하고, JVM은 자바 코드를 실행하고 관리하는 역할하며, 자체적인 메모리 구조를 갖습니다.
- 메소드영역: 클래스 정보, 정적 변수, 상수, 메소드 코드 등이 저장되는 영역
- 힙 영역 : (new 키워드)동적으로 생성된 객체와 배열이 할당, 주기적으로 GC가 제거
- 스택 영역 : 메소드 호출과 관련된 데이터, 지역 변수, 매개 변수 등 임시 값이 저장
- pc 레지스터 (program counter): 현재 실행 중인 JVM 명령어의 주소 저장
- 네이티브 메소드 스택 : 자바 코드 이외의 언어로 작성된 네이티브 메소드 호출에 사용
Q4. OS에서 프로세스가 실행되기 위해 필요한 메모리 공간을 할당하고 관리하는 프로세스 메모리 관리 방법에 대해 설명해주세요
- 스와핑(swapping)
- 현재 실행되지 않는 프로세서들을 임시로 보조기억장치로 보내고 생긴 메모리 상의 빈 공간에 또다른 프로세스를 적재하여 실행하는 방식 (쫓겨 나는것을 스왑아웃)
- 적절한 스왑 하는 방법 = 메모리 관리 방법
- 연속 메모리 할당
- 최초 적합 : 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치
- 최적 적합 : 빈 공간을 모두 검색한 후 프로세스가 적재될 수 있는 가장 작은 공간에 배치
- 최악 적합 : 빈 공간을 모두 검색한 후 적재 될 수 있는 공간 중 가장 큰 공간에 배치
- 분산 메모리 할당
- 페이징 기법 : 고정 크기 분할, 처리할 작업을 동일한 크기의 페이지로 나누고, 메모리를 프레임 단위로 나누어 할당
- 세그먼트 기법 : 가변 크기로 분할한다. 서로 다른 크기의 세그먼트 단위로 메모리를 분할하여 프로세스에 할당
Q5. 프로세스 시스템 종류를 적은 아래 항목을 참고하거나 부족한 부분이 있다면 추가하여 장단점에 대한 설명을 해주세요
(1) 단일 프로세스 시스템 (2) 멀티프로그래밍 (3) 멀티 태스킹 (4) 멀티 스레딩 (5) 최근 컴퓨터는 어떤 시스템인가요?
(1) 단일 프로세스 시스템 : 프로세스 실행 완료 후 다음 프로세스 실행 가능
- 장점 : 간단하고 예측 가능한 동작, 자원 공유와 관리의 간소함
- 단점 : 하나의 프로세스에서 장애가 발생하면 저체 시스템이 영향을 받는다
(2) 멀티프로그래밍 : 여러 개의 프로세스를 동시에 메모리에 유지하고 실행
- 장점 : cpu 이용률을 높여 시스템 성능을 향상, 여러 프로세스가 동시에 실행 되므로 응답 시간 개선 가능
- 단점 : 프로세스 간의 경쟁 조건과 상호 작용 문제 발생 가능성 있음, 메모리와 자원 관리 복잡
(3) 멀티 태스킹 : cpu의 시간을 작은 단위로 나누어 여러 개의 작업을 동시에 실행, 작은 시간 단위로 번갈아 가며 실행 되어 마치 동시에 실행 되는 것 처럼 보인다.
- 장점 : 여러 작업을 거의 동시에 처리, 사용자에게 빠른 응답 제공
- 단점 : 프로세스 간의 상호작용 또는 동기화 문제 발생 가능성 있으며, 시스템의 부하와 자원 관리 필요
(4) 멀티 스레딩 : 단일 프로세스 내에서 여러 개의 스레드가 동시에 실행
- 스레드는 프로세스 내의 자원을 공유하여, 스레드 간의 통신과 자원 공유 용이
- 장점 : 스레드 간의 통신 및 자원 공유의 효율성, 응답 시간의 개선, cpu 이용률 향상
- 단점 : 스레드 간의 동기화 문제, 오류 발생 시 전체 프로세스에 영향
(5) 최근 컴퓨터는 어떤 시스템인가요?
- 멀티코어 시스템 : 여러 개의 cpu 코어를 하나의 프로세서 패키지에 통합하여 여러 작업을 처리
- 멀티 태스킹과 멀티 스레딩의 이점을 동시에 활용 가능
- 멀티코어 시스템은 높은 성능과 효율성을 제공하며, 병렬 처리에 최적화된 프로그램을 개발 가능
- 낮은 메모리 주소와 높은 메모리 주소가 뭔가요? 실제 공간에서의 높고 낮음을 이야기 하는건가요? 왜 나눠 놓은걸까요?(위치에 따라 속도에 차이가 있는건가요?? 아니면 잘 정리하기 위해서? 단순 궁금증)
- 답변:
- 낮은 메모리 주소 : 시스템의 주소 공간에서 상대적으로 낮은 주소 범위이며, 운영체제의 커널, 중요한 데이터 구조, 하드웨어 인터럽트 벡터 등과 같이 시스템의 핵심요소에 할당된다. 낮은 메모리 주소는 특정 시스템 구성 요소의 메모리 매핑을 위해 사용되는 경우가 많다.
- 높은 메모리 주소는 낮은 메모리 주소보다 상대적으로 더 높은 주소 범위이며 사용자 프로세스의 코드, 데이터, 스택, 힙 등과 같이 일반적인 응용 프로그램에 할당된다. 높은 메모리 주소는 프로세스의 메모리 매핑 및 가상 주소 공간을 관리하는데 사용된다. 메모리 주소에 따른 속도 차이는 주소의 위치에 의한 것은 아니고 주로 CPU 캐시와의 상호작용, 메모리 액세스 패턴, 페이지 폴트 등과 같은 요소에 영향을 받는다. 이런 요소들이 메모리 액세스 속도에 영향을 미치는데 메모리 주소의 위치는 그 중 하나이다!
- 낮은 메모리 주소와 높은 메모리 주소는 메모리 주소 공간의 두 영역을 구분하는데 사용되는 개념이다!
- 예상 꼬리물기 질문 및 답변 :
- 프로세스메모리와 커널프로세스 메모리의 차이점이 뭔가요? 둘이 다른건가요?
- 답변 : 프로세스 메모리는 개별 프로세스의 실행에 필요한 메모리 공간이고 커널 프로세스 메모리는 운영체제 커널의 실행에 필요한 메모리 공간이다.
- 프로세스 메모리는 프로세스 간에 격리되어 있어 한 프로세스의 동작이 다른 프로세스에 영향을 주지 않고 그렇기 때문에 보안 및 안정성 측면에서 중요하다.
- 커널 프로세스 메모리는 시스템 전체에 걸쳐 공유되며 다른 프로세스에서 직접 액세스 할 수 없다. 서로 다른 용도로 사용되며 프로세스 간에 격리와 시스템 리소스 관리를 지원하는 역할을 한다!
- 가비지 컬렉션의 성능과 메모리에 미치는 영향을 설명해주세요.
- 답변 : 가비지컬렉션 = 메모리(힙 영역) 정리 → 많이일어나면 성능에 악영향 (GC동안 쓰레드 멈춤)
- 예상 꼬리물기 질문 및 답변 :
- Stop The World 에 대해 설명해주세요. (1번과 함께 설명해도 좋습니다)
- 답변 : GC가 일어날 때 GC 프로세스 이외의 나머지것들이 stop
- 예상 꼬리물기 질문 및 답변 :
- JVM에서 가비지 컬렉션이 어떻게 동작하나요?
- 답변 : stop the world → mark and sweep
- 내부단편화는 블록에 프로세스를 할당했을 경우 남은 메모리가 생기는 것이고 외부단편화는 빈 공간을 모두 더했을 때 프로세스가 들어갈 공간이 충분히 생기지만 할당하지 못하는 문제라고 알고있습니다. 그러면 내부 단화가 지속적으로 일어나면서 외부단편화가 생기는 것인가요??? 궁금..
- 답변: 내부 단편화와 외부 단편화는 동시에 발생할 수도 있고, 독립적으로 발생할 수도 있습니다. 프로세스가 할당된 메모리의 파티션보다 작을 경우 남는 공간이 발생하여 내부 단편화가 발생하게 됩니다. 고정 분할 방식과 게스먼테이션 방식에서 발생할 수 있습니다. 외부 단편화는 메모리의 빈 공간들이 프로세스에 할당될 수 있는 공간을 만들지 못해 프로세스가 들어가지 못하는 것을 말합니다. 이는 동적 메모리 할당 방식에서 발생할 수 있습니다.
- 이 두가지 예시를 보았을 때, 내부 단편화와 외부 단편화는 메모리 할당 방식이나 전략에 따라 서로 다르게 발생하는 것을 볼 수 있습니다. 때문에 이 둘은 별개로 간주되어야 합니다. 2. 예상 꼬리물기 질문 및 답변 :
- 버디 시스템 즉, 메모리의 크기를 절반으로 나누어 같은 크기의 버디 쌍을 생성하는 방식의 경우 프로세스가 메모리를 요구할 때 요구되는 크기와 가장 가까운 큰 크기의 블록을 찾아 할당합니다. 이 방식에서는 내부 단편화가 발생할 수 있지만, 블록 크기를 계속 절반으로 나누어 최소한의 여분 공간을 생성하며 할당하기 때문에 외부 단편화가 줄어듭니다.
'기타' 카테고리의 다른 글
기타 git tip + node module 삭제 (0) | 2023.11.30 |
---|---|
Map과 Hash Table (0) | 2023.09.07 |
OAuth (Open Standard for Authorization) 이해하고 사용하기 (0) | 2023.05.22 |
테스트 데이터 생성하기 (0) | 2023.05.17 |
[Spring Boot] Json과 이미지 파일 데이터를 함께 받기 위한 @RequestParam과 @RequestPart (0) | 2023.05.11 |