운영체제는 프로그램 실행을 위한 환경 제공
## 파란색 배경이 운영체제가 포함하는 것들
-> 하드웨어는 포함하지 않는다.
1. 운영체제 서비스
1) 사용자에게 편리함을 제공하는 os 서비스
a. 사용자 인터페이스
- 명령라인 (CLI), 그래픽 사용자 인터페이스 (GUI)
b. 프로그램 실행
- 프로그램을 메모리에 적재하고 실행
- 정상적 또는 비정상적 방식으로 종료 (오류 시, 표시)
c. i/o 작업
- 실행 중인 프로그램은 입출력 요구 시
- 일반적 사용자는 i/o 장치를 직접 제어할 수 없음. 따라서 이를 위한 실행 수단을 제공해야 함
d. 파일 시스템 조작
- 파일, 디렉토리 생성, 삭제, 읽기
- 파일 검색, 파일 정보 나열, 권한 관리
e. 통신
- 동일한 컴퓨터 내의 프로세스 간 - 공유 메모리, 메시지 전달
- 네트워크로 연결된 컴퓨터 내의 프로세스 간
f. 오류 감지
- cpu, 메모리, 하드웨어, i/o 장치 및 사용자 프로그램에서 발생 가능
- 각 유형의 오류에 대해 os는 정확하고 일관성 있는 컴퓨팅을 보장해야 함
2) 시스템 자체의 효율을 위한 기능
a. 자원 할당
- 병행 실행되는 여러 사용자 또는 여러 작업이 있을 때 각각에게 자원을 할당
- cpu 사이클, 메인메모리,파일 저장장치
- 요청/해제 자원 : i/o 장치
b. 회계
- 어떤 사용자가 어떤 종류의 자원을 얼마나 많이 사용하는지 추적
c. 보호 및 보안
- 다중 사용자 또는 네트워크 컴퓨터 시스템에 저장된 정보의 소유자는 해당 정보의 사용을 제어할 수 있어야 함.
- 병행 프로세스는 서로 간섭하지 않아야 함.
- 보호 : 시스템 리소스에 대한 모든 접근이 통제되도록 보장
- 보안 : 외부로부터의 시스템 보안은 사용자인증(id,pw)으로부터 시작됨
- 철저한 보안으로 외부 i/o장치를 보호함
(외부의 유효하지 않은 접근 시도로부터 시스템 보호)
2. USER OS 인터페이스
- CLI (Command-line-Interpreter)
: 사용자로부터 직접 명령을 입력받아 실행하는 기능
(파일 조작 - 생성, 삭제, 실행, 복사, 출력 등)
- 커널에 포함됨
- 쉘 (Shell)
> 여러 종류가 있으며 모두 비슷한 기능을 가짐 (본 쉘$#, 배시쉘$#, C쉘%) // #은 관리자 권한을 뜻함
> 사용자의 취향대로 선택하여 사용
두 가지 구현 방법
1) CLI 자체가 코드를 포함하여 명령 실행
2) 시스템 프로그램을 통해 실행(ex. 유닉스)
(CLI는 명령어 해석을 할 수 없음)
(해당 명령어를 실행할 코드가 있는 파일을 로드하여 실행)
(개발자는 새로운 명령어를 쉽게 추가할 수 있음)
3. 시스템 콜
1) 운영체제가 제공하는 서비스를 위한 인터페이스 제공
(i/o장치와 os사이의 인터페이스를 제공하는 건 장치드라이버)
- 보통 고급언어로 작성됨 (하드웨어에 직접 접근해야 하는 건 어셈블리어로 작성)
- 예시 : 파일을 복사하는 데 필요한 시스템콜의 호출 순서
2) 개발자들은 시스템콜을 직접 사용하지 않고 고수준 API 사용
- API : 매개변수와 반환값을 포함하여 개발자가 사용 가능한 합수의 집합을 명시한 것
- 가장 일반적인 API
windows 용 Win31 API
POSIX 기반 시스템 용 POSIX API
JVM 용 Java API
- 각 운영체제는 시스템콜에 대한 고유한 이름을 가짐
- 표준 API 사례 : UNIX and Linux read()
3) 시스템콜 인터페이스
- 운영체제가 제공하는 시스템콜과 API의 연결고리
- 각 시스템콜은 해당 함수 번호가 있고, 커널은 이를 위한 테이블 유지
- 해당 시스템콜 실행 종료 후, 종료상태 및 반환 값 반환
- 표준 C라이브러리 사례
: printf() 함수는 시스템 호출 인터페이스를 통해 내부적으로 write() 시스템콜을 호출
시스템콜 매개변수 전달
- 매개변수의 정확한 종류와 양은 OS와 시스템콜에 따라 다르다
매개변수를 전달하는 일반적인 3가지 방법
(1) 가장 간단한 형태 : 레지스터에 매개변수 전달 (cpu 내의 레지스터)
(2) 메모리에 실제 매개변수 저장, 그 블록의 주소를 레지스터에 저장하여 매개변수로 전달
(3) 프로그램이 스택에 push, 운영체제가 pop하는 방법
- 2번 방법
- 개발자 입장에서 시스템콜을 대하는 자세
개발자는 시스템콜의 구현에 대해 알 필요가 없음 - API를 준수, OS작업을 이해하기만 하면 됨
OS 인터페이스의 상세 사항은 개발자에게 숨겨짐
런타임 지원 라이브러리에 의해 관리됨
3. 시스템콜의 유형
1) 프로세스 제어
- 프로세스 생성, 정상 종료
- 프로세스 실행 중 문제 발생 시, 프로세스 비정상 종료 또는 중지 (메모리 덤프 또는 오류 메시지 발생)
- 적재, 실행
- 프로세스 속성 획득 및 설정 (우선순위, 최대 허용 실행시간)
- 일정시간 동안 기다리기
- 사건을 기다리기, 사건을 알림
- 메모리 할당, 메모리 반환
- 프로세스가 공유 데이터 접근을 관리하기 위한 락(lock) 설정
2) 파일 조작
- 파일 생성, 삭제
- 파일 열기, 닫기
- 읽기, 쓰기, 위치 변경
- 파일 속성 획득 및 설정
3) 장치 조작
- 장치 요청, 장치 해제
- 읽기, 쓰기, 접근 위치 재조정
- 장치 속성 획득 및 설정
- 논리적으로 부착 및 분리
4) 정보 유지
- 현재 시간 및 날짜 반환 및 설정
- 사용자 수, 운영체제 버전 정보
- 사용 가능한 메모리 공간의 양, cpu 점유 비중, 네트워크 상태 등
- 메모리 덤프 (프로그램 추적)
- 프로세스, 파일 및 장치 속성 가져오기 및 설정
5) 통신
- 통신 연결생성, 삭제
- 메시지 전달 모델
(호스트 이름, 프로세스 이름을 명시하여 메시지 송신 또는 수신)
- 공유-메모리 모델
(메모리 영역 생성 및 접근 권한 획득)
(shared memory create-shared memory attach)
6) 보호
- 다중사용자가 존재하는 멀티태스킹 컴퓨터 시스템을 포함하여 모든 컴퓨터 시스템(서버부터 이동형 시스템까지)에서 보호에 대한 관심이 높아짐.
- get permission - set permission (자원에 대한 접근 제어를 위한 조작)
- allow user-deny user (사용자 접근 허용 및 거부)
5. 시스템 프로그램
- 프로그램 개발 및 실행을 편리하게 할 수 있는 환경을 제공
- 시스템 유틸리티
- 분류
파일 관리 : create, delete, copy, rename, print, dump, list
상태 정보 : 날짜, 시간, 가용 메모리 공간, 사용자 수, 시스템 성능 등
파일 변경 : 파일 내용 생성, 수정, 찾기 및 변환 기능(문서편집기)
프로그래밍 언어 지원 : 컴파일러, 어셈블러, 디버거, 인터프리터
프로그램 적재 및 실행 : 로더, 디버깅
통신
그 외 응용프로그램
: 일반적인 문제를 해결하거나 일반적인 작업을 수행하는 프로그램들
웹 브라우저, 데이터베이스 시스템, 게임, 통계분석 패키지 등
'전공 테트리스 > 운영체제' 카테고리의 다른 글
[운영체제] 1. Introduction (1) | 2024.10.08 |
---|