-
[WEEK09] 정글 5기 - 정글 끝까지(PintOS) - User Programs정글 크래프톤 5기 회고 및 정리/WIL 2024. 5. 16. 21:34
- 공부 키워드 참조 검색어
Project02 : User Programs
1. User mode vs Kernel mode - 아래 공부 키워드 참조 - 2. Process - 이전 공부 키워드 참조 - ● Process Environment
Block (PEB)[역할]
- PEB는 Windows 운영체제에서 프로세스의 실행 환경을 관리하고 응용 프로그램이 이를 참조할 수 있도록 하는 데이터 구조체
[저장정보]
- PEB는 프로세스 환경 설정, 모듈 정보, 명령줄 인수, 환경 변수 등과 관련된 정보를 저장
[위치]
- PEB는 프로세스의 사용자 모드 주소 공간에 저장된다.+ PCB [역할]
- PCB는 운영체제가 프로세스를 관리하고 제어하기 위한 주요 데이터 구조체
[저장정보]
- PCB는 주로 프로세스 상태, CPU 레지스터, 메모리 관리, 입출력 상태 등과 관련된 정보 저장
[위치]
- PCB는 운영 체제의 커널에 의해 관리되고 커널 내부에 저장된다.● Process identifier (PID) - 운영체제에서 각 프로세스를 고유하게 식별하기 위해 사용되는 숫자
- PID는 운영체제가 프로세스를 관리하고 제어하는 데 있어 중요한 역할을 한다.3. User Stack - 아래 공부 키워드 참조 - 4. x_86_64 calling
convention- x86_64 아키텍처에서 함수 호출 시 인수 전달, 반환 값 처리, 스택 프레임 구성 등에 대한 규칙을 정의한 것이다.
- 종류
· System V AMD64 ABI
· Microsoft x64 호출 규약+ System V AMD64 ABI - 주로 리눅스 및 유닉스 계열 시스템에서 사용
- 첫 6개 정수 인수는 레지스터 'RDI', 'RSI', 'RDX', 'RCX', 'R8', 'R9'에 전달
- 첫 8개 부동 소수점 인수는 'XMMO'에서 'XMM7'에 전달
- 64비트 정수 반환 값은 'RAX'에, 부동 소수점 반환 값은 'XMMO'에 저장
- 호출자 보존 및 호출 대상자 보존 레지스터가 명확히 구분된다.5. Register vs Memory - 아래 공부 키워드 참조 - 6. argument vector - 일반적으로 프로그램이 실행될 때 명령줄에서 전달되는 인수들의 배열을 의미한다.
- C언어에서는 'main' 함수의 인수로 'argc'와 'argv'를 사용하여 명령줄 인수를 처리한다.
- argc
· 명령줄 인수의 개수를 나타내는 정수
- argv
· 명령줄 인수들을 가리키는 문자열 포인터 배열
· 각 원소는 문자열이며, 첫 번째 원소는 프로그램의 이름이다.7. Executable Linkable
Fomat(ELF)& loaderELF
- 유닉스 계열 운영체제에서 사용되는 표준 파일 형식으로, 실행 파일, 공유 라이브러리, 오브젝트 파일 등에 사용된다.
Loader
- 실행 파일을 메모리에 적재하고 실행을 시작하는 시스템 소프트웨어이다.
- ELF 파일을 읽고 필요한 메모리 할당, 세그먼트 로드, 재배치 작업을 수행하여 프로그램을 실행 상태로 만든다.8. system call (syscall) - 아래 공부 키워드 참조 - !!CAUTION!! some system call's semantic may differ from POSIX standards ● filesys related - open, close, create, read, write, seek, tell, ... ● proess related - halt , exit, exec, fork, wait ... 9. file descriptor - 아래 공부 키워드 참조 - ● file descriptor table - 각 프로세스마다 존재하며, 해당 프로세스가 열어놓은 파일 디스크립터들의 배열이다.
- 각 항목은 파일 디스크립터를 통해 열려있는 파일이나 자원에 대한 정보를 담고 있다.● dup2 syscall - 파일 디스크립터의 복사본을 만들고, 특정 파일 디스크립터로 지정된 파일 디스크립터를 복사하는데 사용한다.
- 이는 주로 기존의 파일 디스크립터를 재지정하거나, 표준입력, 출력, 오류와 같은 파일 디스크립터를 리다이렉트할 때 유용하다.
공부 키워드
1. User mode vs Kernel mode
User mode와
Kernel mode- 커널에서 중요한 자원을 관리하기 때문에 사용자가 해당 자원에 쉽게 접근하지 못하도록 보호하기 위해 나뉨
- 시스템에 중요한 영향을 미치는 연산은 커널 모드에서만 실행되도록 함으로써 하드웨어 보안 유지
- 프로세스는 실행되는 동안 유저 모드와 커널 모드를 반복적으로 넘나든다.
· 유저 애플리케이션은 시스템 서비스를 호출할 때 유저 모드에서 커널 모드로 전환
User mode 1. 역할과 제한성
- 사용자 모드는 운영 체제의 보호된 영역 밖에서 실행된다. ( 운영체제의 핵심부분을 보호하기 위한 조치 )
- 프로그램은 시스템의 핵심 하드웨어 자원에 직접 접근할 수 없다.
· ex) 메모리 관리, 파일 시스템 접근, 네트워크 커뮤니케이션 등은 커널이 관리한다.
2. 보안 메커니즘
- 운영체제는 사용자 모드에서 실행되는 응용 프로그램이 커널 모드로의 무단 전환을 시도를 방지
- 잘못된 메모리 접근이나 위험한 명령어 실행 등의 시도가 발생하면, 운영체제는 프로그램을 중단시키거나 예외 처리
3. 일반적인 사용 예
- 대부분의 응용 프로그램은 사용자 모드에서 실행된다.
· ex) 웹 브라우저, 문서 편집기, 게임Kernel mode 1. 전체 접근 권한
- 커널 모드에서 운영체제는 모든 하드웨어 자원에 접근 가능
· 메모리, CPU, 디스크 등 시스템의 모든 자원을 관리하는 데 필요
2. 핵심 기능 수행
- 프로세스 관리 : 프로세스 생성, 스케줄링, 종료 등을 담당
- 메모리 관리 : 메모리 할당, 가상 메모리 관리 등을 수행
- 장치 드라이버 및 입출력 관리 : 하드웨어 장치와의 통신, 드라이버 관리 등을 담당
- 시스템 호출 처리 : 사용자 모드의 응용 프로그램
3. 위험 요소
- 커널 모드에서 발생하는 오류는 시스템 전체의 실패로 이어질 수 있다.
· 따라서 커널 코드는 매우 신중하게 작성되어야 한다.상호작용 및 전환 1. 시스템 호출 (System Call)
- 사용자 모드의 프로그램이 커널 모드의 자원이나 서비스를 요청할 때 사용
· ex) 파일 읽기/쓰기, 네트워크 요청
2. 모드 전환 (Mode Switching)
- 프로그램이 시스템 호출을 사용하면 CPU는 사용자 모드에서 커널 모드로 전환
· 커널이 요청을 처리한 후 다시 사용자 모드로 돌아간다.
3. 보안 및 성능
- 이러한 분리는 시스템의 보안과 안정성을 향상시키는 핵심 요소
- 잘못된 설계된 응용 프로그램이나 악성 코드가 시스템 전체에 영향을 미치는 것을 방지한다.
- 하지만 모드 전환은 시간이 소요되므로, 효율성이 떨어진다.2. Register vs Memory
운영체제의 관점 - 레지서터와 메모리는 컴퓨터 시스템에서 데이터를 저장하고 처리하는 데 필수적인 두 가지 리소스이다.
- 이 두 요소는 속도, 용량, 용도 등 여러 면에서 상당히 다르다.레지스터
(Register)1. 정의 및 특성
- 레지스터는 CPU 내부에 위치한 매우 빠른 데이터 저장소
- 소량의 데이터(바이트 단위)를 저장할 수 있으며, CPU가 직접 접근하여 사용한다.
· 이러한 특성 때문에 레지스터는 매우 빠른 데이터 처리 속도를 가진다.
2. 역할
- 명령어 실행
· CPU는 현재 실행 중인 명령어와 관련된 데이터를 레지스터에 저장한다.
- 임시 데이터 저장
· 계산 중간 결과나 임시 값들을 레지스터에 저장
- 특수 용도
· 프로그램 카운터, 스택 포인터와 같은 특수한 목적을 위한 레지스터도 있다.
3. 운영체제와의 관련성
- 운영체제는 프로세스 전환(context switching) 시 레지스터의 상태를 저장하고 복원하는 작업을 수행
· 이는 각 프로세스가 독립적인 실행 환경을 유지하도록 하는데 중요하다.메모리
(Memory)1. 정의 및 특성
- 메모리(주로 RAM을 지칭)는 컴퓨터 시스템에서 데이터를 저장하는 주요 장치
- 레지스터보다 용량이 크지만, 속도는 레지스터보다 느리다.
- 메모리는 프로그램의 코드와 데이터를 저장하는 데 사용
2. 역할
- 프로그램 저장
· 실행 중인 프로그램의 코드와 데이터를 저장한다.
- 임시 데이터 저장소
· 프로그램 실행 중 생성되는 데이터를 임시로 저장한다.
- 가상 메모리
· 실제 물리적 메모리를 초과하는 데이터를 디스크에 저장하고 필요할 때 불러오는 역할을 한다.
3. 운영체제와의 관련성
- 운영체제는 메모리 관리를 통해 각 프로세스에 메모리 공간을 할당하고 관리한다.
- 메모리 보호, 가상 메모리 관리, 페이징 등의 작업을 통해 시스템의 효율성과 안정성을 유지한다.
레지스터 메모리 속도 - CPU 내부에 있어 빠른 속도로 데이터에 접근 - 레지스터보다 접근 속도가 느리다. 용량 - - 레지스터보다 휠씬 많은 양의 데이터 저장 용도 - 현재 CPU가 처리 중인 작업에 필요한 데이터를 빠르게 처리 - 프로그램의 코드와 데이터를 저장하는 데 사용 비용 - 제작 비용이 높고, 크기 때문에 제한된 양만 제공 - 상대적으로 저렴하고 큰 용량을 제공 3. User Stack
User Stack 1. 정의 및 특성
- 사용자 스택은 프로그램 실행 중에 함수 호출과 반환, 지역 변수, 함수 매개변수 등을 저장하는 데 사용되는 메모리 영역
- LIFO(Last In First Out) 구조를 가지며, 마지막에 들어간 요소가 가장 먼저 나온다.
- 스택 포인터는 스택의 최상단을 가리키며, 함수 호출 시에 스택 포인터가 이동하며 새로운 프레임을 생성
2. 용도
- 함수 호출 관리
· 함수 호출 시 , 호출 정보(리턴 주소, 매개변수, 지역변수 등)가 스택에 저장
- 지역 변수 저장
· 각 함수의 지역 변수는 해당 함수의 스택 프레임 내에 저장된다
- 재귀 및 중첩 함수 호출
· 재귀적 함수 호출이나 중첩된 함수 호출을 관리하는 데 사용된다.운영체제와
User Stack1. 프로세스 관리
- 각 프로세스는 독립적인 사용자 스택을 가진다.
· 이는 프로세스의 독립성과 데이터 보호에 기여한다.
- 운영체제는 프로세스 생성 시 사용자 스택을 할당하고, 프로세스 종료 시 해제한다.
2. 컨텍스트 스위칭
- 프로세스가 전환될 때(컨텍스트 스위칭), 운영체제는 현재 프로세스의 스택 상태를 저장하고, 다음 프로세스의 스택 상태를 복원한다.
· 이는 각 프로세스가 이전 상태를 그대로 유지할 수 있도록 한다.
3. 스택 오버플로우
- 스택 오버플로우는 프로그램이 할당된 스택 영역을 초과하여 데이터를 저장할 때 발생한다.
- 운영체제는 이러한 오류를 감지하고, 보통 프로그램을 종료시키거나 예외 처리를 수행한다.
4. 보안
- 사용자 스택은 버퍼 오버플로우 공격의 대상이 될 수 있다.
· 이를 방지하지 위해 운영체제는 보안 매커니즘을 제공
· 예를 들어, 스택 캐니어리(Stack Canary)와 같은 기술로 스택의 무결성을 보호개발자 관점에서의
중요성- 메모리 관리
· 개발자는 스택의 크기와 사용 방식을 이해하고, 스택 오버플로우나 메모리 누수를 방지하는 방법을 알아야 한다.
- 디버깅
· 프로그램의 오류를 진단할 때 스택의 내용을 검사하는 것은 버그의 원인을 파악하는 데 매우 유용하다.
- 효율적인 코드 설계
· 함수 호출과 지역 변수 사용을 효율적으로 관리하여 메모리 사용을 최적화할 수 있다.4. System Call
시스템 콜 
- 운영체제가 커널에 접근하기 위한 인터페이스
- 프로그램이 OS커널이 제공하는 서비스를 이용하고 싶을 때 시스템콜 발생
- 유저 모드에서 커널 모드 영역의 기능을 사용할 수 있도록 커널 모드로 잠시 전환
· 시스템콜을 기반으로 유저와 커널 분리
- 프로세스/스레드 제어, 파일 조작, 장치 조작, 소켓, 통신 등과 관련한 시스템콜 발생작동원리 - 사용자 프로그램은 시스템 호출을 요청하고, 이 요청은 트랩(trap)이라는 매커니즘을 통해 커널 모드로 전환된다.
- 커널은 요청된 서비스를 수행한 후 결과를 사용자 프로그램에 반환하고, 다시 사용자 모드로 전환된다.시스템 호출의
중요성1. 보안 및 안정성
- 시스템 호출은 사용자 프로그램이 시스템의 중요한 부분에 직접 접근하는 것을 막는다.
· 이는 운영체제와 시스템 자원의 보안을 강화
2. 자원 관리
- 운영체제는 시스템 호출을 통해 자원을 효율적으로 관리한다.
· ex) 메모리 할당과 해제, 파일 접근 권한 관리 등
3. 표준화된 인터페이스
- 시스템 호출은 프로그래밍 언어나 하드웨어에 독립적인 표준화된 인터페이스를 제공한다.
· 이는 다양한 프로그램이 운영체제의 서비스를 일관되게 사용할 수 있다.시스템 호출의
예시1. 파일 관련 시스템 호출
- 파일을 열기(open), 읽기(read), 쓰기(write), 닫기(close) 등의 작업을 수행한다.
2. 프로세스 관리
- 프로세스 생성(fork), 종료(exit), 실행(exec) 등의 작업을 수행한다.
3. 네트워킹
- 소켓 생성, 데이터 송수신, 연결 관리 등의 네트워킹 관련 작업을 수행한다.5. File Descriptor
기본 개념 1. 정의 및 역할
- 파일 디스크립터는 열린 파일, 소켓, 파이프 등의 입출력 자원을 나타내는 정수 값이다.
- 운영체제는 파일 디스크립터를 통해 각 프로세스가 사용하는 파일과 입출력 자원을 구별하고 관리한다.
2. 작동 원리
- 프로그램이 파일을 열면(ex. open 함수 사용), 운영체제는 해당 파일에 대한 고유한 파일디스크립터를 할당
- 프로그램은 이 디스크립터를 사용하여 파일 읽기, 쓰기, 닫기 등의 작업을 수행중요성 1. 자원 관리
- 파일 디스크립터를 통해 운영 체제는 열린 파일과 입출력 자원을 효율적으로 관리할 수 있다.
- 프로세스마다 독립적인 파일 디스크립터 테이블을 가지고, 이를 통해 자원 사용을 추적한다.
2. 보안과 격리
- 파일 디스크립터는 프로세스마다 별개로 관리된다.
· 프로세스 간 격리를 제공하고, 시스템의 보안을 강화한다.
3. 표준화된 인터페이스
- 파일 디스크립터를 사용하면, 다양한 종류의 입출력 자원(파일, 소켓, 파이프 등)에 대해 일관된 방식으로 작업을 수행할 수 있다.
· 이는 프로그래밍의 단순화와 이식성 향상을 기여한다.사용 1. 기본 파일 디스크립터
- 일반적으로 UNIX 및 UNIX 계열 시스템에서는 0(표준 입력), 1(표준 출력), 2(표준 에러)와 같은 기본 파일 디스크립터를 사용한다.
2. 파일 작업
- read, write, close와 같은 시스템 호출은 파일 디스크립터를 인자로 받아 해당 파일에 대한 작업을 수행한다.
3. 리소스 관리
- 프로세스 종료 시, 운영체제는 해당 프로세스에 할당된 모든 파일 디스크립터를 자동으로 닫는다.
· 리소스 누수 방지정리 - 운영체제의 관점에서 파일 디스크립터는 입출력 자원의 관리와 추상화를 위한 핵심 매커니즘
- 이를 통해 프로그램은 하드웨어나 파일 시스템의 복잡성을 직접 다루지 않고도 입출력 작업을 효율적으로 수행 가능6. Cache
기본 개념 1. 정의 및 역할
- 캐시는 데이터 또는 결과값을 임시로 저장하는 고속의 메모리 영역
- 주로 느린 스토리지(ex. 하드 드라이브)와 빠른 프로세서 사이의 속도 차이를 해소하기 위해 사용
2. 작동 원리
- 캐시는 자주 사용되거나 최근에 사용된 데이터를 저장한다.
- 데이터 요청이 있을 때, 시스템은 먼저 캐시를 확인하여 필요한 데이터가 있는지 검사한다.
· 있으면 캐시 히트
· 없으면 캐시 미스 시, 느린 스토리지에서 데이터를 검색한다.중요성 1. 성능 향상
- 캐시를 사용함으로써 데이터 접근 시간을 줄일 수 있으며, 이는 전반적인 시스템 성능을 향상시킨다.
- 특히 입출력 작업이 많은 시스템에서 캐시의 역할은 매우 중요하다.
2. 효율적인 자원 사용
- 캐시를 사용하면 자주 사용되는 데이터를 빠르게 접근할 수 있어, 자원 사용의 효율성을 높일 수 있다.
- 이는 CPU의 처리 능력과 디스크의 입출력 부하를 줄이는 데 도움을 준다.운영 체제에서의
캐시 사용1. CPU 캐시
- CPU 내부에는 여러 레벨의 캐시가 존재한다.
· L1, L2, L3 등
· 이 캐시들은 CPU가 빠르게 데이터에 접근하도록 돕는다.
2. 디스크 캐시
- 운영체제는 디스크 입출력을 최적화하기 위해 디스크 캐시를 사용한다.
- 자주 사용하는 파일이나 데이터를 RAM에 저장하여 빠른 접근을 가능하게 한다.
3. 소프트웨어 및 응용 프로그램 캐시
- 운영체제 또는 응용 프로그램은 자체적인 캐시 매커니즘을 구현하여 성능 향상
- 예를 들어, 웹 브라우저는 자주 방문하는 웹 페이지의 데이터를 캐시에 저장한다.캐시 관리 - 캐시일관성
· 캐시된 데이터가 원본 데이터와 동기화되어야 한다.
· 일관성을 유지하는 것은 캐시 관리의 중요한 부분이다.
- 교체 정책
· 캐시 메모리가 가득 찼을 때 어떤 데이터를 교체할지 결정하는 정책이 필요하다.
· LRU(Least Recently Used), FIFO(First In First Out) 등의 알고리즘이 사용된다.7. Atomic Operation
원자적 연산의
기본 개념- 한 번에 실행되고 중단되거나 방해받을 수 없는 연산을 의미한다.
- 원자적 연산은 멀티태스킹 환경과 병렬 컴퓨팅에서 데이터의 일관성과 동기화를 유지하는 데 필수적이다.
1. 정의 및 특성
- 원자적 연산은 시작되면 중간에 중단되지 않고 완전히 수행되는 연산을 말한다.
- 연산이 완료되거나 시작되지 않은 것처럼 보장되어야 한다.
· 이는 "모두 아니면 전혀없음(all or nothing)"의 특성을 가진다.
2. 중요성
- 병렬 프로그래밍과 멀티스레딩 환경에서 데이터 무결성을 보장한다.
- 동시에 여러 스레드나 프로세스가 같은 데이터에 접근할 때 발생할 수 있는 충돌을 방지한다.운영체제에서의
원자적 연산1. 동기화 매커니즘
- 운영체제는 원자적 연산을 통해 공유 자원에 대한 동기화를 한다.
· ex) 뮤텍스(Mutex), 락, 세마포어(Semaphore) 등
· 이러한 매커니즘은 여러 스레드가 동시에 공유 자원을 변경하지 못하도록 보장한다.
2. 인터럽트와 원자성
- 인터럽트가 발생해도 원자적 연산은 중단되거나 방해받지 않는다.
· 이는 시스템의 안정성과 예측 가능성을 향상시킨다.
3. 하드웨어 지원
- 많은 현대 프로세서들은 원자적 연산을 직접 지원한다.
· ex) 'Compare and Swap', 'Test and Set'
- 이러한 하드웨어 지원은 원자적 연산의 효율성과 신뢰성을 높인다.예시 1. increment 연산
- 공유 변수에 대한 increment 연산은 원자적으로 수행되어야 한다.
· 카운터 변수에 대한 동시 접근과 변경 시
2. 데이터베이스 트랜잭션
- 데이터베이스 시스템에서 트랜잭션은 원자적으로 처리된다.
- 모든 데이터베이스 작업이 성공적으로 완료되거나, 오류가 발생하면 변경사항이 롤백된다.
3. 메모리 할당
- 메모리 할당과 해제 연산은 원자적으로 수행되어야 한다.
- 동시에 여러 스레드가 메모리 할당을 요청할 때 데이터 충돌을 방지한다.정리 - 원자적 연산은 복잡한 멀티태스킹 환경에서 프로그램의 안정성과 무결성을 유지하는 데 중요하다.
- 이는 프로그램의 오류 없는 실행과 데이터 일관성을 보장하는 데 핵심적인 역할을 한다.8. rax register
기본 개념 - x86-64 아키텍처에서 매우 중요한 역할을 하는 레지스터 중 하나이다.
· x86-64는 64비트 프로세서에서 사용되는 인스트럭션 세트 아키텍처(ISA)
1. 정의 및 특성
- RAX는 x86-64 아키텍처에서 사용되는 범용 레지스터이다.
- 64비트 시스템에서는 RAX라는 이름을 가지며, 32비트에서는 EAX, 16비트에서는 AX로 알려져있다.
2. 역할
- 함수의 반환 값
· RAX 레지스터는 함수 호출의 결과값을 저장하는 데 주로 사용된다.
· 즉, 함수가 값을 반환할 때 RAX에 그 값이 저장된다.
- 산술 연산
· 산술 연산 및 다른 명령어의 결과값을 저장하는 데에도 사용된다.
- 호환성
· 이전 16비트 및 32비트 시스템과의 호환성을 위해, RAX는 부분적으로 AX 및 EAX로 사용될 수 있다.운영체제에서의
rax register 사용1. 시스템 호출
- 시스템 호출을 수행할 때, RAX는 호출되는 시스템 호출의 번호를 저장하는 데 사용된다.
- 시스템 호출이 완료된 후, RAX는 반환값을 담는 데 사용된다.
2. 프로그램 예외 처리
- 프로그램이 예외 상황을 만났을 때, RAX는 예외 처리 루틴에서 중요한 정보를 담는 데 사용될 수 있다.
3. 최적화
- 컴파일러는 RAX를 자주 사용되는 값의 저장 및 연산에 사용하여 성능을 최적화한다.중요성 - RAX는 프로그램의 실행과 운영 체제의 시스템 호출에서 핵심적인 역할을 한다.
- 하드웨어 아키텍처와 운영체제 사이의 인터페이스를 이해하는 데 중요한 역할을 하며, 효율적인 프로그램 설계와 최적화에 기여한다.9. 32 bit OS vs 64 bit OS
32비트 운영체제 1. 메모리 주소 지정
- 32비트 운영체제는 최대 2^32바이트 (약 4GB)의 메모리 주소를 지정할 수 있다.
- 실제 사용 가능한 메모리는 종종 4GB미만으로 제한된다.
· 이는 시스템 자원이 일부 주소 공간을 사용하기 때문이다.
2. 성능 및 호환성
- 오래된 하드웨어 및 소프트웨어와의 호환성이 좋다.
- 32비트 시스템은 데이터 처리량이 상대적으로 적기 때문에, 낮은 성능의 하드웨어에서도 잘 작동한다.
3. 응용 프로그램 개발
- 32비트 응용 프로그램은 32비트 레지스터와 명령어 세트를 사용하여 개발된다.
- 32비트 응용 프로그램은 메모리 사용에 있어 제한이 있다.64비트 운영체제 1. 메모리 주소 지정
- 64비트 운영체제는 최대 2^64바이트의 메모리 주소를 지정할 수 있다.
· 이는 이론적으로 수 페타바이트(PB)의 메모리 주소 지정이 가능함을 의미한다.
- 실제로, 하드웨어 및 운영체제 설계에 따라 사용 가능한 메모리는 이보다 적을 수 있다.
2. 성능 향상
- 더 많은 데이터와 메모리 주소를 처리할 수 있어, 높은 성능의 애플리케이션 및 데이터 집약적 작업에 적합하다.
- 더 큰 메모리 주소 공간을 활용하여, 대규모 메모리를 요구하는 응용 프로그램을 효율적으로 실행할 수 있다.
3. 응용 프로그램 개발
- 64비트 응용 프로그램은 64비트 레지스터와 확장된 명령어 세트를 활용하여 개발된다.
- 이는 향상된 성능과 더 큰 메모리 할당이 가능하다는 것을 의미한다.
32 bit OS 64 bit OS 메모리 관리 - - 훨씬 더 큰 메모리 주소 공간 제공
· 이는 메모리 집약적인 작업과 애플리케이션에 유리성능 - - 데이터 처리량이 더 크다.
- 고성능 컴퓨팅 환경에 더 효율적이다.호환성 - - 일부 32비트 응용 프로그램은 64비트 운영체제에서 호환성 모드로 실행될 수 있지만, 그 반대는 불가능 10. Interrupt
Interrupt - 시스템에서 발생한 다양한 종류의 이벤트 or 그런 이벤트를 알리는 메커니즘
- 인터럽트 신호가 들어오면 CPU를 잠깐 정지, 즉각적으로 인터럽트를 처리하기 위해 커널 코드를 커널 모드로 실행
인터럽트의 종류
- 하드웨어 인터럽트 : I/O 디바이스에서 발생하는 인터럽트
- 소프트웨어 인터럽트(트랩) : 0으로 나누는 산술 연산, 잘못된 메모리 공간 접근 등 프로세스 오류로 발생하는 인터럽트처리 과정 
1. 인터럽트 요청
2. 프로세스 실행 중단 (실행 중이던 명령까지만 수행)
3. PCB(Process Control Block)에 현재 프로세스 상태 저장 및
· PC(Program Counter)에 다음 실행할 명령 주소 저장
4. 인터럽트 벡터를 읽고 인터럽트 처리 루틴 실행 (인터럽트 처리)
5. 처리 완료 시 저장했던 프로세스 상태 복구
6. 인터럽트 해제 및 중단된 프로세스 재개11. Segmentation Fault
Segmentation
Fault- 주로 Unix 및 Unix 계열 운영체제에서 발생한다.
- C나 C++에서 Segmentation Fault 오류가 발생한다.
· 두 언어가 포인터와 배열을 사용하여 메모리에 직접 접근할 수 있는 기능을 제공하기 때문이다.
· 즉, 메모리 관리를 프로그래머에게 주어지기 때문이다.
- 메모리에 접근하려고 할 때 허용되지 않는 메모리 영역을 접근하려고 시도할 때 발생하는 오류이다.
· NULL인 경우
· 메모리를 동적 할당할 때, 할당받지 않은 메모리에 접근할 경우
출처
ETC
1. 커널 모드에서 실행될 수 있는 작업의 예를 들고, 이러한 작업들이 사용자 모드에서 실행되지 않는 이유를 설명하세요
- 공유 자원 관리는 운영 체제의 중요한 기능 중 하나로, 주로 커널 모드에서 실행된다.
- 예를 들어, 파일 시스템, 메모리, 프린터 등과 같은 자원은 여러 프로세스에 의해 동시에 요청될 수 있으며, 이에 대한 접근과 사용을 적절히 관리하는 것이 필수적이다.
- 커널 모드에서는 이러한 자원들에 대한 접근을 제어하고, 충돌이나 데이터 손상을 방지하는 역할을 한다.- 사용자 모드에서는 이러한 공유 자원의 직접 관리를 수행하지 않는다.
- 이는 여러 사용자 또는 프로세스가 자원에 직접 접근할 경우 데이터의 일관성과 안정성을 위협받을 수 있기 때문이다.2. 운영 체제에서 컨텍스트 스위칭이 발생하는 과정에서 어떤 정보가 저장되고 복원되는지 설명하세요.
- 컨텍스트 스위칭 과정에서 운영 체제는 현재 프로세스의 상태(컨텍스트)를 저장하고, 다음에 실행할 프로세스의 저장된 상태를 복원한다.
- 저장되는 정보에는 프로세스의 프로그램 카운터, 레지스터 상태, 메모리 관리 정보, 열린 파일 목록 등이 포함된다.3. fsync() 함수의 작동 원리를 설명하고, 이 함수가 파일 시스템에서 어떤 역할을 하는지 서술하세요. 또한, fsync()를 사용할 때 고려해야 할 성능상의 영향에 대해서도 설명하세요.
- fsync() 함수는 열려 있는 파일 디스크립터와 관련된 모든 수정된 데이터를 디스크에 동기화한다.
- 이는 파일의 쓰기 작업이 메모리에만 저장되는 것이 아니라, 실제 저장 매체에도 반영되도록 보장하는 역할을 한다.
- fsync()의 중요한 역할 중 하나는 시스템이 예기치 않게 중단되더라도 데이터의 무결성을 보장하는 것이다.- fsync()를 사용할 때의 주요 성능상의 영향으로는 디스크 I/O 작업이 증가하여 시스템의 전반적인 성능 저하가 발생할 수 있다는 점을 고려해야 한다.
- 특히, 빈번한 fsync() 호출은 디스크의 작업 부하를 증가시키고, 결과적으로 시스템의 반응 속도를 늦출 수 있다.'정글 크래프톤 5기 회고 및 정리 > WIL' 카테고리의 다른 글
[WEEK11] 정글 5기 - 정글 끝까지(PintOS) - Virtual Memory (0) 2024.05.30 [WEEK08] 정글 5기 - 정글 끝까지(PintOS) - Threads (0) 2024.05.09 [WEEK07] 정글 5기 - 캐시(발표를 위한 정리) (0) 2024.05.09 [WEEK07] 정글5기 - 탐험 준비 - 웹서버 만들기 (0) 2024.05.02 [WEEK06] 정글5기 - 탐험준비 - Malloc Lab (0) 2024.04.25