윈도우의 프로세스와 스레드 (11)
윈도우의 프로세스와 스레드 (11)
우선권 가감
스레드 우선권 가감 연산은 누적하여 수행할수없습니다.
운영체제는 하나의 스레드에 대한 기저 우선권을 기억하고있으며, 스레드의 우선권 조정 함수는 이 기저 우선권에 대해서만 가감을 합니다.
즉 원래 기저 우선권이 10인 스레드에 우선권 조정을 몇번 반복 하더라도 우선권은 12 또는 15로 밖에는 설정할수없다는것입니다.
따라서 우선권은 사용할수있는 범위한계가 있습니다.
기저 우선권에 우선권을 계속 더해도 각자의 컴퓨터는 모두다 다른 설정을 지니므로 기저 우선권은 1~2 정도 오차가 있을수있습니다.
따라서 프로그램의 수행 결과 초기값이 비해 어느정도 변경은 있었는지 알아내는것이 중요합니다.
우선권변경은 일반적으로는 운영체제의 필요에 의해 이루어집니다.
이말은 운영체제의 필요가 아니라면 우선권변경은 프로그램 적으로 거의 이루어지지 않는다는것입니다.
간혹 익스플로러의 프로그램이 작업 관리자의 종료 명령도 무시하고 계속 수행되는 경우를 볼수있으며 이런 현상은
프로그램의 버그등에 작업관리자보다 해당 프로그램의 스레드 우선권이 높은 경우에 나타나게 됩니다.
윈도우와 프로세스
유닉스에서는 여러개의 프로세스를 동시에 운영하는것이 보편적이였습니다.
분기라는 형태로 하나의 프로세스에서 다른 프로세스를 형성하고 그 기저에는 셸 프로세스가 존재합니다.
일차적으로 셸 프로세스가 형성되고 그 위에서 프로세스는 계속 시스템 분기를 사용하여 프로세스를 형성해 나갑니다.
만들어진 프로세스는 이전 프로세스의 거의 대부분의 속성을 계승하며, 특히 보안성과 관련해서는
출발한 프로세스 대부분의 속성을 가지고있습니다.
프로세스는 해당 프로그램에서 필요한 주소공간을 확보하고있으며, 관계 리소스를 모두 보유하고있습니다.
유닉스에서는 fork()함수를 사용하여 시스템 호출로 새로운 함수를 만들어내며 프로세스자체가 차지하는 오버헤드가 크지않기때문에
멀티프로세스 프로그램이 힘들지않게 운영됩니다.
윈도우에서는 프로세스를 여러개 실행시키는 작업은 거의 이루어지지않으며 필요에 의해 프로세스가 생성된다고 할지라도
최소한의 프로세스 작업으로 처리해 주어야 합니다.
윈도우 프로세스는 새로 프로세스를 형성하였을경우에는 기존 프로세스와 완전히 별개인 하나의 프로세스가 형성됩니다.
실제로 윈도우 시스템에서 새로운 프로세스를 형성하여 작업을 시도하는 경우는 많지않습니다.
동시에 많은 창이 뜨는 윈도우 프로그램은 거의 다 새로운 창은 하나의 스레드로 동작하도록 설정합니다
작업관리자를 사용하면 현재 운영되고있는 프로세스와 프로세스가 사용하고있는 CPU 점유율을 볼수있습니다.
프로세스가 사용하는 시간 점유율은 그 프로세스가 형성한 모든 스레드의 동작시간의 총합으로 정의됩니다.
스레드를 전혀 생성하지않도록 프로그램을 설계했다고 하더라도 최소 하나의 스레드가 정의된다고 앞에 이미 언급하였습니다.
실제로 프로세스를 생성하는것은 아주 다양하고 복잡한 개념을 포괄하고있습니다.
2000 윈도우에서는 어떤 스테이션 어떤 세션, 어떤 ACL 를 갖고있는지 프로세스자체에 명시해야 하는데,
윈도우에서는 근본적으로 이러한 설정들을 아예 처음부터 새로 만들수있는사실에 주목해야합니다.
프로세스와 스레드 자체는 윈도우 보안성과 아주 밀접히 관련있으며 , 이러한 일들은 시스템에
누가 들어와있는지 판별하는과정과 아주 밀접하게 관련됩니다.
Reference
- https://karfn84.tistory.com/entry/%ED%8E%8C%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%9C%88%EB%8F%84%EC%9A%B0%EC%9D%98-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C