CS/운영체제 8

[운영체제] 3. Process - 2 (Thread)

Thread(lightweight process) Thread란 프로세스의 내부의 CPU 실행 단위 / CPU 수행 단위이다. 동일한 작업을 하는 프로세스가 여러 개 인 경우 프로세스의 Address space는 하나만 생성하고 여러 개의 thread를 둠으로써 메모리의 낭비를 줄이고 프로세스마다 다른 부분의 코드를 실행할 수 있다. (lightweight process) Thread의 구성 program counter register set stack space thread가 동료 스레드와 공유하는 부분(=task) code section data section OS resources 전통적인 개념의 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다. 다중 ..

CS/운영체제 2022.06.07

[운영체제] 3. Process - 1

프로세스의 개념 "Process is a program in execution" 즉, 실행중인 프로그램을 의미 프로세스를 이해하려면 프로세스의 문맥을 이해해야 한다. 프로세스의 문맥 (context) 특정시점에서 프로세스가 어디까지 수행을 했는지에 대한 정보를 담고있다. 프로세스의 문맥은 프로그램 카운터가 어디를 가리키고 있는지(코드의 어디까지 실행했는가), 메모리에 담고있는정보, 스택정보 등을 담고있기때문에 현재시점에 프로세스의 진행상황을 알 수 있다. CPU 수행 상태를 나타내는 하드웨어 문맥 Program Counter가 가르키는 instruction의 위치 -> 어디까지 실행하였느가? 각종 register -> 어떤 정보가 담겨져 있는가? 프로세스의 주소공간(메모리와 관련) code, data, ..

CS/운영체제 2022.05.29

[운영체제] 1. 운영체제란?

운영체제란? 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층 협의의 운영체제(커널) - 운영체제의 핵심부분으로 메모리에 상주하는 부분 커널은 컴퓨터 전원을 켠 다음 부팅이 일어난다음 항상 메모리에 상주하는 부분 광의의 운영체제 - 커널 뿐 아니라 각종 주변 시스템 유틸리티를 포함한 개념 윈도우를 설치하면 메모리에 상주하지 않는 별도의 프로그램들도 같이 설치가 되는데, 이들도 운영체제의 범주에는 포함된다. 운영체제의 목적 두개의 큰 목표를 가짐 하드웨어를 효율적으로 관리 사용자나 각종 소프트웨어가 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공 자원을 효율적으로 관리 컴퓨터 시스템의 자원(프로세서, 기억장치, 입출력 장치)을 효율적으로 관리한다..

CS/운영체제 2022.05.29

[운영체제] System Call

fork(), exec(), wait()와 같은 것들은 Process 생성과 제어를 위한 System call이다. fork, exec는 새로운 Process 생성과 관련이 되어 있다. wait는 Process(Parent)가 만든 다른 Process(child)가 끝날 때까지 기다리는 명령어이다. Fork : 새로운 Process를 생성할 때 사용한다. (근데 좀 이상함....) #include #include #include int main(int argc, char *argv[]) { printf("pid : %d", (int) getpid()); // pid : 29146 int rc = fork();// 주목 if (rc < 0) { exit(1); }// (1) fork 실패 else if (..

CS/운영체제 2022.05.24

[운영체제] 인터럽트(Interrupt)

프로그램을 실행되는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생한 상황을 우선 처리가 필요함을 CPU에게 알려준다. 지금 수행 중인 일보다 더 중요한 일(ex. 입출력, 우선 순위 연산 등)이 발생하면 그 일을 먼저 처리하고 하던 일을 처리 하여야 한다. 외부/내부 인터럽트 : CPU의 하드웨어 신호에 의해 발생 외부 인터럽트 : 입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생 -> 전원 이상, 기계 착오, 외부 신호, 입출력 내부 인터럽트 : Trap이라고 부르면서, 잘못된 명령이나 데이터를 사용하여 발생 -> 0으로 나누기가 발생, 오버플로우, 명령어를 잘못 사용한 경우(Exception) 소프트웨어 인터렙트 : 명령어의 수행에 의해 발생, 프로그램..

CS/운영체제 2022.05.24

[운영체제] 프로세스의 주소 공간

프로그램이 CPU에 의해 실행된 -> 프로세스가 생성되고 메모리에 프로세스 주소 공간이 할당됨 프로세스 주소 공간에는 코드,데이터,스택으로 이루어져 있다. 코드 Segment: 프로그램 소스 코드 저장 데이터 Segment: 전역 변수 저장 스택 Segment: 함수, 지역 변수 저장 구역을 나눈 이유?? 최대한 데이터를 공유하여 메모리 사용량을 줄여야 한다. Code는 같은 프로그램 자체에서는 모두 같은 내용이기 때문에 따로 관리하여 공유한다. Stack과 데이터를 나눈 이유는, 스택 구조의 특성과 전역 변수의 활용성을 위한 것!! 프로그램의 함수와 지역 변수는, LIFO특성을 가진 스택에서 실행이 된다. 따라서 이 함수들 안에서 공통으로 사용하는 '전역 변수'는 따로 지정하면 메모리를 아낄수 있다.

CS/운영체제 2022.05.24

[운영체제] ARC란 무엇인가?

ARC가 메모리 영역 중 힙 영역을 관리하는 특징을 가지고 있습니다.일단 리마인드하면 인스턴스,클로저 등등 참조 타입(Reference Tyoe)은 자동으로 힙에 할당 됩니다.class Human { var name: String? var age: Int? init(name: String?, age: Int?) { self.name = name self.age = age }} let sodeul = Human(name: "Sodeul", age: 26)human이라는 클래스가 있고 sodeul이라는 인스턴스를 생성하고 값을 초기화 하였습니다.일단 여기서 변수가 전역 변수로 보이겠지만 일단 보통 개발 하듯이 클래스에 생성된 지역 변수라고 생각해줍시다.지..

CS/운영체제 2022.05.05

[운영체제] 메모리 구조(Code,Data,Stack,Heap)은 무엇일까?

운영체제는 메모리에 이 프로그램을 위한 공간을 할당 해 준다.그때 공간을 4가지(Code, Data, Heap, Stack)으로 나뉘어져있다.먼저 코드 영역에 대해 알아 보도록 하자- 우리가 작성한 소스 코드가 기계어 형태오 저장이 된다.- 컴파일 타임에 결정되고, 중간에 코드가 변경되지 않도록 Read-Only 형태로 저당된다. 그다음은 데이터 영역~- 전역변수, static 변수로 저장- 프로그램 시작과 동시에 할당되고, 프로그램이 종료 되어야 메모리가 해제가 된다.- 실행 도중 변수 값이 변경될 수 있으니 Read-Write로 지정된다. 이번은 힙 영역을 알아보도록 하자. 이 부분은 ARC와 연관이 있는데 ARC는 다음 포스팅으로 알아보도록 합시다.- 프로그래머가 할당/해제 하는 메모리 영역- 프로..

CS/운영체제 2022.05.05