본문 바로가기

CS/오퍼레이팅 시스템

(19)
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. 에러탐지 : 하..
5. 유저와 커널 * 인터럽트 review - 운영체제는 많은 interrupt handler를 처리함 - 소프트웨어 인터럽트(트랩) : exception, system call - 하드웨어에 의해 야기된 인터럽트 * 듀얼모드 : 커널과 유저 - OS는 커널과 유저를 구분하는 메커니즘 제공 - 모드비트로 구분함 - 현재 수행중인 프로그램이 어떤 모드인지 구분하는 하드웨어 - os를 에러로부터 보호하기 위해 듀얼모드 사용 - 커널에서 privileged instruction을 수행하기 위해, 유저에서는 privileged 수행 허용이 안뒴 *모드 비트 시스템 콜을 호출하면 mode bit = 0 해서 시스템콜 수행, 시스템콜은 커널에서 수행 - privileged instructions :유저 모드로 전환, io 제어, 인..
4. 멀티프로그래밍 : 멀티프로세서, 멀티코어 * 멀티 프로세서 : 여러 개의 프로세서에서 동시에 일을 수행하는 것 - 여러개의 cpu - 처리율 증가 : N개의 프로세서로 성능 N배를 만들지는 않음 (멀티프로세서를 관리하는 오버헤드 때문에) - 경제적 : 프로세서들이 주변기기와 스토리지, 메모리를 공유해서 경제적임 - 하나의 프로세서가 고장나도 다른 cpu로 처리가 가능해서 신뢰도 증가 * 멀티 프로세서 종류 - asymmetric : 프로세서간 master-slave 관계. master가 시스템을 제어하고 slave는 master 지시대로 프로그램 수행 slave는 private한 메모리를 갖고 일을 처리함 - symmetric : master-slave 관계가 없음 모든 프로세서가 메모리를 공유하고 서로 직접적으로 interact 할 수 있음 ..