기술면접 3. OS, 메모리

Ethereal·2021년 12월 27일
0

기술면접

목록 보기
4/5

OS

내 OS 이론 정리글 링크:

pintOS관련 링크 모음:
https://bdbest.tistory.com/191

파일시스템 + 캐시
https://velog.io/@bdbest72/pintOS-project4-file-system-%EC%9D%B4%EB%A1%A0

가상메모리
https://velog.io/@bdbest72/pintOS-project3-virtual-memory-%EC%9D%B4%EB%A1%A0

시스템콜
https://velog.io/@bdbest72/pintOS-project2-User-Programs-system-call

쓰레드 및 프로세스
https://velog.io/@bdbest72/WIL-thread-system-synchronization

카이스트 권영진 교수님 추상화와 관련된 OS 강의
https://drive.google.com/file/d/1v7ZT0uCqnSFQQY3jQsnXnCh9WHPpgQxZ/view


🟩프로세스와 쓰레드의 차이

프로세스란 단순히 실행 중인 프로그램이라고 볼 수 있고, 이를 위해 운영체제에 의해 메모리 공간을 할당받아있다. thread란 프로세스 내에서 실제로 작업을 수행하는 주체이다. 프로세스 내에는 한개 이상의 스레드가 존재하며 프로세스에 할당된 메모리 자원을 공유하며 작업을 수행한다.

프로세스와 쓰레드 차이에 대해 잘 기술된 링크:
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

  • 멀티 쓰레드와 멀티 프로세싱의 차이?
  • 다수의 Thread를 쓰는 것과 다수의 Process를 쓰는 것 각각의 장단점은?

🟩프로세스 간 통신 방법은?

프로세스 간 통신(Inter-Process Communication, IPC)이란 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로를 뜻한다.

https://doitnow-man.tistory.com/110


메모리

메모리 영역 구조

아주 잘 정리되어있는 글 링크 및 아래 내용 출처:
https://velog.io/@soosungp33/%EB%B6%80%EC%8A%A4%ED%8A%B8%EC%BA%A0%ED%94%84-%EC%B1%8C%EB%A6%B0%EC%A7%80-Day04-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0%EC%99%80-%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B4%80%EB%A6%AC

프로세스가 생성될 때 할당 받는 메모리 영역들:
1. 코드
2. 데이터
3. 힙
4. 스택

코드

쉽게 말하면 실행할 프로그램의 코드가 저장되는 영역이라고 하는데 우리가 알고 있는 코드가 들어가는 것이 아니라 컴퓨터가 읽을 수 있는 컴파일 된 기계어가 들어가 있습니다.
Text 영역이라고도 하며 프로그램이 시작하고 끝날 때까지 메모리에 존재합니다.
따라서 CPU가 코드 영역에 있는 명령어들을 하나씩 읽어서 처리하게 됩니다.

데이터

작성한 코드에서 전역 변수, 정적(Static)변수, 문자열 상수 등이 저장되는 영역입니다.
이 영역 또한 프로그램이 시작하고 끝날 때까지 메모리에 존재합니다.
사실 더 구체적으로 말하자면 Data 영역 안에서 초기화된 변수(GVAR), 초기화되지 않은 변수(BSS)로 나뉩니다.

전역 변수(global variable)란 함수의 외부에서 선언된 변수를 의미합니다.

전역 변수는 프로그램의 어디에서나 접근할 수 있으며, 프로그램이 종료되어야만 메모리에서 사라집니다.

이러한 전역 변수는 메모리상의 데이터(data) 영역에 저장되며, 직접 초기화하지 않아도 0으로 자동 초기화됩니다.

동적으로 할당되는 메모리 공간으로 malloc이나 new 명령어를 통해 할당되고 할당 시 낮은 주소에서 높은 주소의 방향으로 할당됩니다.
사용자가 직접 관리하는 영역이며 런타임 시에 크기가 결정되고 힙 영역에 할당한 메모리 공간에 대한 주소를 참조하는 방법으로 사용됩니다. (Stack 영역에 heap을 참조하는 주소가 할당됩니다. 즉, 실제 데이터를 가지고 있는 heap 영역의 참조 값을 stack 영역의 객체가 가지고 있습니다.)

스택

콜스택이란 현재 실행중인 서브루틴에 대한 정보들을 담아두는 스택구조의 메모리영역이다. 함수를 호출 할 때 지역변수, 매개변수들이 저장되는 영역입니다. (메인 함수도 포함) + 반환 주소에 대한 정보

🟩매개변수

매개변수(parameter)란 함수의 정의에서 전달받은 인수를 함수 내부로 전달하기 위해 사용하는 변수를 의미합니다.
인수(argument)란 함수가 호출될 때 함수로 값을 전달해주는 값을 말합니다.
대부분의 함수는 하나 이상의 매개변수를 가지며, 매개변수가 없는 함수도 존재합니다.

🟩지역변수

지역 변수(local variable)란 '블록' 내에서 선언된 변수를 의미합니다.
지역 변수는 변수가 선언된 블록 내에서만 유효하며, 블록이 종료되면 메모리에서 사라집니다.
이러한 지역 변수는 메모리상의 스택(stack) 영역에 저장되며, 초기화하지 않으면 의미 없는 값(쓰레기값)으로 초기화됩니다. 함수의 매개변수 또한 함수 내에서 정의되는 지역 변수로 취급됩니다.


stackoverflow란

Overflow
재귀를 반복적으로 호출하면서 Stack 메모리 영역에 해당 함수의 지역변수, 매개변수들이 계속 할당되다가 OS에서 할당해준 Stack영역의 메모리 영역을 넘어버리면 많이들 들어본 Stack Overflow가 발생합니다.

반대로 많은 동적 할당으로 인해 heap 영역이 stack 영역을 침범하게 되면 Out of Memory가 발생하게 됩니다. (Java에서 많이 발생하고 GC를 통해 관리됩니다.)

profile
꿈에다가 우리들의 돛을 달고 앞으로 다가올 그 날을 위해 밤을 지나자

0개의 댓글