1. 운영체제의 역할 : 하드웨어 자원관리, 성능(performance) , 편리성, 보안
2. 여러 사용자가 하나의 컴퓨터를 이용하는 경우 - 대표적으로, 서버컴퓨터를 생각할 수 있다.
여러명의 유저가 수강신청을 하기위해 하나의 서버 컴퓨터를 이용한다.
이때 만약 어떤 유저가 마음대로 하드웨어 자원에 접근할 수 있다면?? 해당 컴퓨터를 못쓰게 만들수도 있고, 다른 유저의 데이터를 마음대로 훔쳐볼 수도 있게된다.
이러한 보안 문제관련, 운영체제는 하드웨어 자원을 유저가 직접관리하도록 하는것이아니라 운영체제에게 맡기도록 한다. 만약 유저가 이러한 룰을 위반하고 맘대로 스스로 건드리려고 하면- 해당 프로세스는 중지된다.
대표적으로 io자원을 생각할 수 있다. 자바로 프로그래밍할때 우리는 직접 하드웨어 자원이 어디있는지 명시적으로 알고 사용하지 않는다. 실제로는 디스크의 어딘가에 물리적으로 저장되어 있을테지만 그 위치를 우리가 찾아서 사용할 필요가 없다. 그냥 이 위치의 이 이름 파일을 불러줘~~ 하고 형식만 맞추어서 (스트림이든 버퍼든 채널이든) 운영체제에게 넘기면, 운영체제가 그것을 처리해준다. 개발자의 영역이 아니기 때문에 Exception을 반드시 걸어야 하는것 같다(이건 나의 추측)
그래서 어떠한 프로세스가 컴퓨터 메인메모리에 올라와있을때, 이 프로세스는 계속해서 user mode 와 system mode를 왔다갔다하는 상태를 겪는다.
3. 프로세스와 프로그램?
프로그램은 단순히 하드웨어에 저장되어 있는 실행파일에 지나지 않다. 이것은 무덤속에 가만히 누워있는 것과 똑같다.
프로세스는 메인메모리에 올라와있는 프로그램, 즉 실행중인 - 살아있는 작업이다. job이라든지 task라든지 여러 단어가 존재하는데 같다고 생각해도 좋다.
하드웨어 속에서 죽어있는 프로그램이 - 메인메모리에 올라와서 프로세스가 된다.
4. 프로세스의 상태
프로세스는 여러 상태변화를 가진다. 무덤속에 있을때는 잠잠했던 세상이 별세상이 되고 온갖 소리와 변화를 경험한다.
NEW - READY - RUNNING - WAITING - TERMINATED
NEW는 말그대로 생성되어 초기화되는 단계이고, 메모리에 완전히 올라와서 초기화가 종료되면 그때부터 cpu에게 처리될 수 있는 READY상태가 된다.
그리고 실제로 cpu에게 처리되고있는 상태를 RUNNING상태라고 한다.
단 우리는 multiprogrmming컴퓨터를 이용하고 있기 때문에, io작업 등 cpu의 연산능력을 필요로 하지않는- 다른 하드웨어 부서를 이용해야 하는 작업이 요구될경우 자연스럽게 자리를 양보하며 waiting 상태로, 그리고나서 io를 끝내고 ready큐로 다시 들어와서 기다린다.
여기에 플러스, time sharing을 이용하고 있기 때문에 - running에서 - 할당된 시간이 종료되념 다시 ready큐로 들어온다.
결국 ready-running-waiting의 상태에서 빙빙빙 계속 돌다가, 프로세스가 종료되면 그제서야 terminated되며 메인메모리로부터 할당이 해제되는 것이다.
댓글 없음:
댓글 쓰기