본문 바로가기

분류 전체보기

(357)
13. 프로세스 시스템콜 부모 프로세스는 프로세스 트리형태를 만들면서 자식 프로세스를 만듦 아래 프로세스들의 부모가 프로세스가 되는 sched 프로세스는 pid가 0이 됨 * 프로세스 생성시 발생 이슈 - 부모프로세스와 자식프로세스는 리소스를 일부만 공유함 - 두 프로세스는 병렬적으로 수행되기도 하고 부모 프로세스가 wait 시스템콜로 자식 프로세스의 종료를 기다리기도 함 - 자식 프로세스는 부모프로세스와 별개의 프로세스이므로 주소 공간이 같으면 안됨 - 복제 후 overwrite * 유닉스 리눅스에서 fork system call - fork 함수는 프로세스를 생성하는 시스템콜임 - 리소스 공유 cpu 메모리 리소스는 별도의 프로세스에 별도로 할당되어야 함 부모 프로세스가 오픈한 파일은 자식프로세스와 공유됨 - 부모프로세스와 ..
12. 프로세스 스케줄링 - 프로세스는 active entity : 여러개의 프로세스가 번갈아 수행되기 때문에 스케줄링이 필요 * process scheduling queue - job queue : 시스템 내의 모든 프로세스의 집합 메인 메모리로 로드할 프로세스를 job큐에서 선택 - ready queue : 현재 state가 ready인 프로세스의 집합 프로세스가 waiting 상태면 절대 스케줄링을 하지 않음 cpu는 ready 큐에서 하나를 선택 = 프로세스 스케줄링 - device queue : 입출력 연산을 기다리는 프로세스들의 집합 => 프로세스들은 이 큐들을 옮겨다니면서 실행 됨 - ready큐에 있는 프로세스 하나를 선택해서 cpu에 dispatch됨 - cpu에서 실행이 끝나면 모두 ready상태가 됨 - 입출..
11. 프로세스 개념 * 프로세스 vs 프로그램 - 프로세스는 실행중인 프로그램 - 프로세스는 job, task 와 다 같은 말로 사용될 예정 e.g. 프로그램 파워포인트를 더블클릭해서 실행시키면 프로세스가 됨 - 프로세스는 현재 수행 중이라서 주소공간이 필요함 - 더많은 정보를 필요로함 - 프로그램은 디스크에 저장된 프로그램 - stack : 프로세스 수행 시 필요한 로컬변수나 함수에 전달될 인자를 저장 - heap : malloc함수를 통해 동적할당된 메모리 저장, 동적할당될 때마다 사이즈 증가, 삭제 시 사이즈 감소 - PCB (프로세스 관리를 위한 블록) : 프로그램 카운터, 프로세스 레지스터 - 프로세스가 line by line으로 계속 수행되고, 현재 프로세스에 맞게 레지스터 값을 계속 변경 e.g. 다음에 수행할..
10. 시스템 부팅, 부트스트랩 로더 * system boot : 부팅될 때 일어나는 os가 하는 일 - system generation(SYSGEN) : 시스템이 어떻게 설정되는지 세팅되는 과정 시스템 오퍼레이터에게 물어보거나, probe, 주어진 파일을 읽어봄 - SYSGEN program : 어떤 하드웨어를 사용했는지 자동으로 아는 프로그램 - 부팅 : 컴퓨터를 시작하는 커널에 로드된 절차 - 부트스트랩 로더 : 하드웨어 초기화 -> 커널을 메모리로 로딩 -> 커널 메인함수에 제어권을 줌 일반적으로 시스템 부팅할 때 처음 확인하는 롬에 부트스트랩 로더를 저장해둠 - single step approach : 1) 부팅 2) 부트스트랩로더로 제어권이 넘어감 3) 하드웨어 초기화 4) os를 램으로 로드 5) 제어권을 os 제일 첫번째 라인..
9. 오퍼레이팅 시스템 구조 : 레이어, 마이크로커널, 모듈, 버츄어머신 * simple structure - 현재는 사용되지 않는 구조 - 모듈이나 레이어로 나뉘어지지 않음 - 듀얼 모드가 되어있지 않음 - 하드웨어 보호가 안됨 e.g. MS-DOS - 응용 프로그램들은 기본 io연산을 디바이스에 직접할 수 있음 - 유저레벨에서 하드웨어를 직접적으로 건드릴 수 있음 - 응용프로그램이 리소스를 건드리면 시스템이 망가질 가능성이 커짐 엄격하게 커널과 유저모드를 구분해서 하드웨어 관리는 커널이 해야함 * layered - 리눅스, 유닉스에서 사용되는 구조 - 각 레이어는 하부레이어에서 제공되는 연산으로만 구현되어야함 e.g. 시스템콜 : 시스템콜 인터페이스는 커널(낮은계층)에서 제공, 유저(상위 계층)는 커널에서 제공하는 인터페이스만 사용 - 프로그램 작성 시 각 레이어에 대해서..
8. 오퍼레이팅 시스템 설계와 구현 * 설계 구현 목적 - 사용자 관점 : 사용자가 편리하게 사용, 배우기 쉽고 안정적으로 동작, 안전하게 수행, 빠르게 실행 - 시스템 관점 : 모듈화, 설계 및 구현 유지가 쉽고 신뢰성, 유연함, 에러없이 효과적으로 설계 * 설계 원칙 - 염두할 내용 : policy가 바뀌어도 내부 메커니즘은 바뀌면 안됨 (os위에서 동작하는 응용프로그램이 추가 및 변경되어도 커널 내부를 바꾸면 안됨) - 가장 적합한 구조가 마이크로 커널 구조 마이크로 커널 : 커널을 마이크로화함. 네가지 기능 중 핵심 기능인 cpu 관리만 커널에 넣고 나머지는 유저레벨에 둠 모널리티 커널 : 마이크로 커널과 반대되는 개념 커널의 기능 네가지를 다 넣은 커널, 파일 시스템이나 디바이스 변경 시 커널이 바뀜 (커널의 기능 : 프로세스 관..
7. 시스템콜 * 시스템콜 : os에 서비스를 요청할 수 있는 메커니즘 - 커널모드로 전환 : 하드웨어 인터럽트, 트랩(소프트웨어 인터럽트) - 응용프로그램에서 시스템콜 API 호출 - 시스템콜 API를 전형적으로 라이브러리에 저장 - 라이브러리에 있는 시스템콜 API를 호출하면서 OS에 서비스 요청 - 시스템콜 호출 시 OS 내 프로그램 수행을 위해 커널모드로 전환 * 중요한 설계 원리 - policy : 목적, 어떤 것을 할지 - machanism : 방법, 어떻게 할 건지 e.g. - 어플리케이션이 서비스 요청을 함 (policy)-> 시스템콜(mechanism) - cpu 리소스 제어를 유지함(policy) -> timer(mechanism) *API - 라이브러리에 내포 - Win32 API, POSIX(유닉..
6. 오퍼레이팅 시스템이 제공하는 서비스 * 사용자 관점 1. user interface - 커맨드라인 : 사용자가 직접 명령어를 입력 shell에 코드 삽입 -> shell이 방대해짐, 코드를 별도 파일에 저장 후 그 파일을 커맨드에서 실행 - GUI : 사용자가 편리하게 이용하게 해줌 현재 대부분의 os가 사용. 윈도우, 유닉스, 리눅스(GUI 개발을 위한 프로젝트 KDE) - 배치 인터페이스 : 일련의 명령어를 모은 파일, 패일 수행시 명령어들 연속적 시행 2. 프로그램 수행 : 로딩과 수행 순서를 결정 3. I/O 연산 : 하드웨어 관리, 파일과 IO장치에 접근하는 인터페이스 제공 4. 파일시스템 조작 : 파일 시스템 접근, 읽고 쓰는 파일을 생성하고 삭제하고 검색 5. 커뮤니케이션 : 프로세스 간 커뮤니케이션 지원 6. 에러탐지 : 하..