뭐했다고 벌써 12주차죠?
ㄴㄴ
과제 제목은 CPU 스케줄링
---
메모리 주소 (주기억장치!)
18로 나뉜 메모리의 각 영역은 메모리 주소로 구분하는데 보통 0번지부터 시작
CPU는 메모리에 있는 내용을 가져오거나 작업 결과를 메모리에 저장하기 위해 메모리 주소 레지스터(MAR)를 사용
갑자기 가상 메모리를 사용한다는데 이게 무슨 뜻인지 모르겠어요 졸려 죽겠음
굉장히 큰 하드의 용량을 좀 떼고 그걸 가상기억장치로 사용을 하는데 아무튼 지금 얘기 아님
그 위에꺼? 폰노이만 구조가 먼저 나오고 메모리 주소 내용이 나와야 한다. 그니까 어쨌든 뭐냐 MAR 사용하게 되었다가 중요.
메모리 관리의 이중성
프로세스 입장에서는 메모리를 독차지 하려고 하고, 메모리 관리자 입장에서는 관리를 효율적으로 하고 싶어함
엄마랑 자식인가
아무튼 331p 3번째 줄 오른쪽 옆으로 밀고, 작은 공간을 합쳐 나갑니다
프로세스 입장 : 작업의 편리성
메모리 관리자 : 작업의 충돌
아무튼 파일이 실행되는 파일은 소스코드가 아니라 .obj가 exe로 바뀐 무언가가 실행이 됨. 메모리에 올라오는 것도 얘고.
소스코드의 번역과 실행
언어 번역 프그램의 종류
컴파일러 : 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역 후 ㅎ한꺼번에 컴파일 후 실행. c언어, 자바 등
인터프리터 : 소스코드를 한 행씩 번역하여 실행 - 에러 찾기가 어렵고 최적화가 힘듦. (파이썬)
컴파일러의 목적
1. 오류 발견
2. 코드 최적화 : 소스코드를 간결하게 정리하여 실행 속도를 빠르게 하는 것
332, 333p 확인.
아무튼, 목적 파일은 com아니면 exe가 나오는데..... .....
★컴파일러와 인터프리터의 차이(334p)
컴파일러는 실행 정 소스코드를 점검하여 목적 코드 -> 목적 파일 만드는거.
인터프리터는 한줄 씩 차례대로 실행이 됨. 별도의 번역본(목적파일)이 없음.
컴파일러를 통해 작성한 프로그램은 실행 가능한 파일로 만들어짐 - 기계어로 변경됨.
처리 속도는 고급 언어보다 저급언어가 빠름.
컴파일 과정
1. 소스코드 작성 및 컴파일 (에러찾기와 최적화)
2. 목적 코드와 라이브러리 연결
3. 동적 라이브러리를 포함하여 최종 실행
- 정적 링킹을 하게 될 경우, 라이브러리 내의 함수가 변경돠면 다시 컴파일을 해야 했지만, 동적 라이브러리는 실행 시에 포함됨으로 재 컴파일이 필요하지 않음.
336p
stdio.h > 새로운 뭐가 printf에서 다 끝남..?
갑자기 DLL이 나옴. 우리가 쓰는 윈도우는 DLL에서 많이 구성이 됨. 새로운 구성이나 기능이 여기서 많이 뭐..
그래서 메모리 관리자가 하는 일로 넘어갑시다. 환경이 만들어졌는데 운영체제를 메모리 위에서 돌림. 메모리 관리자가 이 때 해야 할 일은?
1. 가져오기 (주어 : 프로세스와 데이터)
2. 배치 : 어느 지점에 올릴지 판단하는 것.
3. 재배치 : 메모리가 꽉 찼을 대 이미 활용되는 프로세스를 오래걸려서 뭐가 안되고 있으면 버리고 새로운 프로세스를 영입시킴.
꽉 차 있
메모리 관리자의 정책
1, 가져오기 정책 : 프로세스가 필요로 하는 데이터를 언제 가져올지 결정하는 정책
2. 배치 정책 : 가져온 프로세스를 메모리의 어떤 위치에 올려놓을지 결정하는 정책
3. 재배치 정책 : 메모리가 꽉 찼을 때 메모리 내에 있는 어떤 프호세스를 내보낼지 결정하는 정책
CPU의 비트
- 한번에 다룰 수 있는 데이터의 최대 크기 : WORD
32비트 : 1WORD = 32bit
32비트 CPU 내의 레지스터 크기는 전부 32비트, 산술논리연산장치와 대역폭도 32비트.
32비트 CPU의 메모리 크기 : 0000000000000000000000000..~FFFFFFFFFFFFFF....
64비트
물리주소 공간과 논리 주소 공간
물리 주소 : 하드우ㅐ오 압장에서 바라본 주소 공간으로 컴퓨터를 뭐 어쩌구
논리 주소 ㅣ 사용자 기준
단순 메모리 주소
한번에 한가지 일만 처리하는 일괄 처리 시스템에서 사용 가능
메모리를 운영체제 영역과 사용자 영역으로 분리
단순 메모리 구조에서 사용자 프로세스 적재
- 사용자 프로세스는 운영체제 영역을 피하여 메모리에 적재
사용자 프로
운영체제와 상관 없이 메모리를 거꾸로,..? 뭐 그런.
경계 레지스터 342p
운영체제 영역과 사용자 영역 경계 지점의 주소를 가진 레지스터
CPU내에 있는 경계 레지스터가 사용자 영역이 운영체제 영역으로 침범하는 것을 막아줌
메모리 관리자는 사용자가 요청할 때마다 경계 레지스터의 값을 벗어나는지 검사하고, 만약 경계 레지스터를 벗어나는 작업을 요청하는 프로세스가 있으면 그 프로세스를 종료
절대 주소
- 실제 물리 주소를 가리키는 주소
메모리 주소 레지스터가 사용하는 주소
컴퓨터에 꽂힌 램 메모리의 실제 주소
상대 주소
사용자 영역이 시작되는 번지를 0번지로 변경하여 사용하는 주소
사용자 프로세스 입장에서 바라본 주소
절대주소와 상대주소 차이343p 표.....
상대주소->절대주소로 변환하는 과정
메모리 접근 시 상대 주소를 사용하면 절대 주소로 변환해야 함.
메모리 관리자는 사용자 프로세스가 상대 주소를 사용하여 메모리에 접근할 때마다 상대 주소값에 재배치 레지스터 값을 더하여 절대 주소를 구함
재배치 레지스터는 주소 변환의 기본이 되는 주소값을 가진 레지스터, 메모리에서 사용자영역의 시작 주소값이 저장.
책 동그라미 1, 2번 확인.
메모리 오버레이
프로그램의 크기가 실제 메모리보다 클 때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라 가져오는 기법.
메모리 오버레이를 사용하면 "물리메모리보다 더 큰 프로그램도 실행 가능".
책 확인!
스왑 영역
메모리가 모자라서 쫓겨난 프로세스를 저장장치의 특별한 공간에 모아두는 영역
메모리에서 쫓겨났다가 다시 돌아가는 데이터가 머무는 곳이기 떄문에 저장장치는 장소만 빌려주고 메모리 관리자가 관리
사용자는 실제 메모리의 크기와 스왑 영역의 크기를 합쳐 전체 메모리로 인식하고 사용
스왑 인 : 스왑 영역에서 메모리로 데이터를 가져오는 작업
스왑아웃 : 메모리에서 스왑영역으로 데이터를 내보내는 작업
347.p 하단부 메모리가 부족해 쫓겨난 데이터가 저장된 공간 : 스왑 영역
아무튼 이 모든 부분을 메모리 관리자가 일해
메모리 오버레이에서 메모리보다 큰 프로그램을 올릴 때 오버레이 진행, 남은 부분은 스왑에 넣어둠.
프로세스를 불러오는데... 절전모드가 큰 예시인데....
메모리 분할 방식
메모리에 여러개의 프로세스를 배치하는 방법
1. 가변분할방식 : 프로세스의 크기에 따라 메모리를 나누는 것
- 프로세스의 크기에 맞게 메모리가 분할
()메모리의 영역이 각 각 다름
연속 메모리 할당
장점 ; 프로세스를 한 덩어리로 처리하여 하나의 프로세스를 연속된 공간에 배치
단점 : 비어있는 공간을 하나로 합쳐야 하며 이 과정에서 다른 프로세스의 아^^^
고정 분할 방식 : 프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 것
- 크기에 상관 없이 메모리가 같은 크기로 나뉨
- 비연속 메모리 할당
외부 단편화 해결
메모리 배치 방식 : 작은 조각이 발생하지 않도록 프로세스를 배치하는 것
조각 모음 ㅣ 조각이 발생했을 때 작은 조각들을 하나으 ㅣ큰 덩어리로 만드는 작업
★메모리 배치 방식
최초 배치 : 무조건 첫번째 자리부터 채워나감
- 빈 공간을 찾을 필요 없은. 시간이 줄어들음.
최적 배치 : 비어있어도 작은 자리를 찾아가는
- 빈 공간을 모두 확인하는 부가적인 작업이 있지만 딱맞는 공간 찾을 시 단편화가 일어나지 않음
- 딱 맞는 공간이 없을 시, 아주 작은 조각을 만들어내는 단점
최악 배치 : 그냥 제일 넓은곳! 넓은!
- 프로세스를 배치하고 남은 공간이 크기 때문에 쓸모가 있음
빈 공간의 크기가 클 떄는 효과저깅지만 빈 공간의 크기가 점점 줄어들면 최적 배치처럼 작은 공간을 만들어냄
조각 모음
작은 단편화............
고정 분할 방식과 내부 단편화
각 메모리 조걱에 프로세스를 배치하고 공간이 남는 현상
고정분할방식은 내부 단편화를 줄이기 위해 신중히 메모리의 크기를 ㅈ결정하여 나누어야 하지만 사용하는 프로세스의 크기가 제각각이기 때문에 메모리를 얼마로 나누느냐에 관한 정답은 없음
가변분할방식과 고정분할방식 표
버디 시스템
- 프로세스의 크기에 맞게 메모리를 1/2로 자르고 프로세스를 메모리에 배치
나뉜 메모리의 각 구영에는 프로세스가 1개만 들어감
프로세스가 종료되면 주변의 빈 조각과 합쳐 하나의 큰 덩어리를 만듦
컴파일 과정 - 심화학습 확인!
'Computer' 카테고리의 다른 글
BOF 기초 정리 (0) | 2019.11.27 |
---|---|
[asm] INT 21H (0) | 2019.10.01 |
GDB 실습하면서 정리하는 명령어 (0) | 2019.09.25 |
메모리 구조 (0) | 2019.09.24 |
Register - 간단 개념 정리 (0) | 2019.09.23 |