ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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)
    & loader
    ELF
    - 유닉스 계열 운영체제에서 사용되는 표준 파일 형식으로, 실행 파일, 공유 라이브러리, 오브젝트 파일 등에 사용된다.

    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 Stack
    1. 프로세스 관리
    - 각 프로세스는 독립적인 사용자 스택을 가진다.
        · 이는 프로세스의 독립성과 데이터 보호에 기여한다.
    - 운영체제는 프로세스 생성 시 사용자 스택을 할당하고, 프로세스 종료 시 해제한다.


    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인 경우
        · 메모리를 동적 할당할 때, 할당받지 않은 메모리에 접근할 경우

     


    출처

    더보기

    1. 유저모드 & 커널모드, 인터럽트, 시스템콜

    https://zu-techlog.tistory.com/122

     

    2. https://velog.io/@orcasuit/posts


    ETC

    1. 커널 모드에서 실행될 수 있는 작업의 예를 들고, 이러한 작업들이 사용자 모드에서 실행되지 않는 이유를 설명하세요

    - 공유 자원 관리는 운영 체제의 중요한 기능 중 하나로, 주로 커널 모드에서 실행된다.
    - 예를 들어, 파일 시스템, 메모리, 프린터 등과 같은 자원은 여러 프로세스에 의해 동시에 요청될 수 있으며, 이에 대한 접근과 사용을 적절히 관리하는 것이 필수적이다.
    - 커널 모드에서는 이러한 자원들에 대한 접근을 제어하고, 충돌이나 데이터 손상을 방지하는 역할을 한다.
    - 사용자 모드에서는 이러한 공유 자원의 직접 관리를 수행하지 않는다.
    - 이는 여러 사용자 또는 프로세스가 자원에 직접 접근할 경우 데이터의 일관성과 안정성을 위협받을 수 있기 때문이다.

     

    2. 운영 체제에서 컨텍스트 스위칭이 발생하는 과정에서 어떤 정보가 저장되고 복원되는지 설명하세요.

    - 컨텍스트 스위칭 과정에서 운영 체제는 현재 프로세스의 상태(컨텍스트)를 저장하고, 다음에 실행할 프로세스의 저장된 상태를 복원한다.
    - 저장되는 정보에는 프로세스의 프로그램 카운터, 레지스터 상태, 메모리 관리 정보, 열린 파일 목록 등이 포함된다.

     

    3. fsync() 함수의 작동 원리를 설명하고, 이 함수가 파일 시스템에서 어떤 역할을 하는지 서술하세요. 또한, fsync()를 사용할 때 고려해야 할 성능상의 영향에 대해서도 설명하세요.

    - fsync() 함수는 열려 있는 파일 디스크립터와 관련된 모든 수정된 데이터를 디스크에 동기화한다.
    - 이는 파일의 쓰기 작업이 메모리에만 저장되는 것이 아니라, 실제 저장 매체에도 반영되도록 보장하는 역할을 한다.
    - fsync()의 중요한 역할 중 하나는 시스템이 예기치 않게 중단되더라도 데이터의 무결성을 보장하는 것이다.
    - fsync()를 사용할 때의 주요 성능상의 영향으로는 디스크 I/O 작업이 증가하여 시스템의 전반적인 성능 저하가 발생할 수 있다는 점을 고려해야 한다.
    - 특히, 빈번한 fsync() 호출은 디스크의 작업 부하를 증가시키고, 결과적으로 시스템의 반응 속도를 늦출 수 있다.
Designed by Tistory.