-
[컴퓨터 시스템] 2일차교육 2019. 10. 15. 00:33
- 아래 내용은 '컴퓨터 시스템(3판)' 책을 바탕으로 몰랐던 내용이나, 알고 있더라도 머릿속에 좀 더 각인시키면 좋을 것 같은 내용 위주로 기록했다.
- 자세한 정리보단, 핵심만 남기는 것을 선호하는 편이라 친절하지 않을 수 있다.
- 깊이 있는 학습을 원한다면 별도로 책(컴퓨터 시스템(3판))을 구입하여 학습하길 권한다.
- 스스로 언제든 틀릴 수 있다는 사실을 인식하고 있기 때문에, 피드백은 언제나 환영한다.
- 목표는 기본기 튼튼한 프로그래머가 되기 위함이다.
Context Switch
- OS는 현재 프로세스에서 다른 프로세스로 제어를 옮길 때 현재 프로세스의 context(프로세스의 상태 정보)를 저장하고, 새 프로세스의 context를 복원시킴. 이를 Context Switch라고 함
- OS에서 말하는 Context(상태 정보)란 CPU가 프로세스를 실행하기 위한 해당 프로세스의 정보들
- Context는 프로세스의 PCB(Process Control Block)에 저장됨
- Interrupt에 의해 Context Switch 발생Virtual Memory
- 프로세스들이 메인 메모리 전체를 독점하고 있는 것 같은 착각을 제공하는 추상화 개념
- 제한된 physical memory의 한계를 극복하고자 디스크와 같은 느린 저장장치를 활용해, 애플리케이션들이 더 많은 메모리를 활용할 수 있게 해주는 것
- 프로세스의 logical memory와 physical memory를 분리시킨 개념
- Page란, 가상 메모리를 사용하는 최소 크기 단위
- 프로세스마다 아래 그림처럼 virtual memory를 가짐
- 리눅스에서는 주소 공간의 최상위 영역은 모든 프로세스들이 공통으로 사용하는 운영체제의 코드와 데이터를 위한 공간이 있음
- virtual memory는 아래 영역으로 구성되어 있음
- 프로그램 코드와 데이터
- 프로그램 코드는 모든 프로세스들이 같은 고정 주소에서 시작함
- 다음에 전역 변수들이 옴
- 크기가 고정되어 있음 - Heap
- C 표준 함수인 malloc이나 free를 호출하면서 런타임에 동적으로 크기가 늘었다 줄었다 하는 영역 - 공유 라이브러리
- C 표준 라이브러리나 수학 라이브러리와 같은 공유 라이브러리의 코드와 데이터를 저장하는 영역 - Stack
- 컴파일러가 함수 호출을 구현하기 위해 사용하는 영역
- 힙과 마찬가지로 User Stack은 프로그램이 실행되는 동안에 동적으로 늘었다 줄었다 함 - 커널 가상 메모리
- 주소 공간의 맨 윗부분은 커널을 위해 예약되어 있음
- 응용프로그램들은 커널 영역의 내용을 직접 읽거나 쓰는 것이 금지되어 있음
- 대신, 이런 작업을 수행하기 위해서는 커널을 호출해야 함
참고
컴퓨터 시스템(3판)
'교육' 카테고리의 다른 글
[컴퓨터 시스템] 3일차 (0) 2019.11.12 [Node.js] 13일차 (0) 2019.10.09 [컴퓨터 시스템] 1일차 (0) 2019.10.07 [Node.js] 11일차 (1) 2019.09.27 [Node.js] 10일차 (0) 2019.09.25 - 프로그램 코드와 데이터